2013-04-29 52 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