是否可以并行执行两个异步方法?

Á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似乎等待从未发生的任务的响应.

为什么在第一种情况下应用程序没有被阻止,在第二种情况下它是?

Ste*_*ary 5

您的示例都将阻止UI线程.这Task.WaitAll意味着什么.

但是,您可以使用TaskEx.WhenAll:

await TaskEx.WhenAll(tsk01, tsk02);
Run Code Online (Sandbox Code Playgroud)