2013-04-29 91 views
0

我想在vb.net 4.5框架中做一个非常简单的工作;创建并运行一个简单的异步任务,它将象征性地(使多个数据库调用异步/并行)。vb.net task.delay锁浏览器

我正在使用vs2012和vb.net非常简单的MVC应用程序和一个控件。

的代码很简单>

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    Dim newTask As Task(Of String) = TryPause() 
    lblResults2.Text = newTask.Result 
End Sub 

Public Async Function TryPause() As Task(Of String) 
    Await Task.Delay(100) 
    Return "hello World" 
End Function 

代码当 “task.delay” 被说出来运行良好。 但是,如果它停留在代码内部,浏览器就会锁定。

注意:thread.sleep工作正常....

我在想什么?

+1

你不应该使用'.Result'来同步等待'Task'。这会导致一个会破坏你的代码的死锁。 – SLaks 2013-04-29 21:18:56

+0

谢谢我会牢记这一点;我目前正在尝试并行运行多个进程,并将结果返回给主调用程序; taskfactory象征着thread.sleep;但是我不能让task.delay工作,它几乎看起来像是后台线程,并且永远不会回到调用者。我试图在webforms/mvc中。我即将离开证明延迟并开始进行实时数据库调用。 – 2013-04-29 21:28:53

回答

2

正如@SLaks正确指出的那样,Result正在导致死锁。我更详细地解释这个on my blogin a recent MSDN article

+0

是的!!!!!非常感谢.....你是达人! – 2013-05-01 16:22:30