我有一個異步代碼塊在頁面加載運行。 的代碼運行smoothy直到你到達那裏,我們創建一個新的task.On執行該代碼塊中的等待只是凍結,然後在控制犯規回來好像代碼capturevalue方法只是去死鎖異步等待導致死鎖
protected void Page_Load(object sender, EventArgs e)
{
try
{
var textvalue = GetTextValueFromTask();
txtbox.Text = textvalue.Result;
string ss = "";
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
private async Task<string> GetTextValueFromTask()
{
string strReturn = await CaptureValue();
return strReturn;
}
private async Task<string> CaptureValue()
{
Thread.Sleep(5000);
Task<string> T = Task.Factory.StartNew<string>(() => "hi");
return await T;
}
然後我在Capturevalue方法中做了一些小改動。
private async Task<string> CaptureValue()
{
Thread.Sleep(5000);
Task<string> T = Task.Factory.StartNew<string>(() => "hi");
string ss = T.Result;
return await T;
}
一旦我作出改變它開始工作normal.What差異並使其對剛剛獲取的結果開始。請幫助我Iam一個新手異步
'Thread.Sleep'和等待任務的'Result'在異步代碼中是一個很大的禁忌,特別是當涉及到UI時。閱讀,摘要,行動:http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html – spender
@spender你如何在評論中突出顯示單詞作爲代碼?謝謝 –
@FirstStep:http:// stackoverflow。com/editing-help#註釋格式 – spender