Álv*_*cía 0 c# asynchronous async-await
如果我执行两个任务,我可以同时执行这两个任务,并等到两个任务完成.使用此代码:
Task<bool> tsk01 = Task.Run(()=> my code; return true);
Task<bool> tsk02 = Task.Run(()=> my code; return true);
Task.WaitAll(tsk01, tsk02);
//next code
Run Code Online (Sandbox Code Playgroud)
在这种情况下,以下代码仅在所有任务完成时执行.但是应用程序没有被阻止.
但是,如果我有这个代码:
private async void Button_Click_2(object sender, RoutedEventArgs e)
{
Task<bool> tsk01 = miMetodoAsync01();
Task<bool> tsk02 = miMetodoAsync02();
Task.WaitAll(tsk01, tsk02);
}
private async Task<bool> miMetodoAsync02()
{
return await TaskEx.Run<bool>(() =>
{
Int64 resultado = 0;
for (Int64 i = 1; i < 1000000000; i++)
{
resultado = resultado + 1;
}
return true;
}).ConfigureAwait(false);
}
private async Task<bool> miMetodoAsync01()
{
return await TaskEx.Run<bool>(() =>
{
Int64 resultado = 0;
for (Int64 i = 1; i < 1000000000; i++)
{
resultado = resultado + 1;
}
return true;
}).ConfigureAwait(false);
}
Run Code Online (Sandbox Code Playgroud)
在第二个选项中,应用程序被阻止,因为WaitAll似乎等待从未发生的任务的响应.
为什么在第一种情况下应用程序没有被阻止,在第二种情况下它是?
您的示例都将阻止UI线程.这Task.WaitAll
意味着什么.
但是,您可以使用TaskEx.WhenAll
:
await TaskEx.WhenAll(tsk01, tsk02);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1788 次 |
最近记录: |