myesn

myEsn2E9

hi
github

[未完成]C#: 异步返回类型(Async return types)

异步方法可以具有以下返回类型:

有关异步方法的详细信息,参阅 Asynchronous programming with async and await

还有几种特定于 Windows 工作负载(work loads)的类型存在:

Task 返回类型(Task return type)#

异步方法如果不包含 return 语句,或者 return 语句没有返回操作数,则通常具有 Task 返回类型。如果它们以同步方式运行,则返回 void。如果在异步方法中使用 Task 返回类型,调用该方法的方法可以使用 await 运算符来挂起调用者的完成,直到被调用的异步方法完成。

在下面的示例中,WaitAndApologizeAsync 方法不包含 return 语句,因此该方法会返回一个 Task 对象。通过返回 Task 类型使得 WaitAndApologizeAsync 可以被等待。Task 类型不包括 Result 属性,因为它没有返回值。

public static async Task DisplayCurrentInfoAsync()
{
    await WaitAndApologizeAsync();

    Console.WriteLine($"Today is {DateTime.Now:D}");
    Console.WriteLine($"The current time is {DateTime.Now.TimeOfDay:t}");
    Console.WriteLine("The current temperature is 76 degrees.");
}

static async Task WaitAndApologizeAsync()
{
    await Task.Delay(2000);

    Console.WriteLine("Sorry for the delay...\n");
}
// Example output:
//    Sorry for the delay...
//
// Today is Monday, August 17, 2020
// The current time is 12:59:24.2183304
// The current temperature is 76 degrees.

WaitAndApologizeAsync 方法使用 await 语句而不是 await 表达式进行等待,类似于同步无返回值(synchronous void-returning)方法的调用语句。在这种情况下,使用 await 操作符不会产生值。当 await 的右操作数是 Task 时,await 表达式会产生 T 的结果。

你可以将对 WaitAndApologizeAsync 方法的调用与应用 await 运算符分开,如下面的代码所示。但请记住,Task 没有 Result 属性,并且在将 await 运算符应用于 Task 时不会产生任何值。

以下代码将调用 WaitAndApologizeAsync 方法与等待该方法返回的 Task 分开。

Task waitAndApologizeTask = WaitAndApologizeAsync();

string output =
    $"Today is {DateTime.Now:D}\n" +
    $"The current time is {DateTime.Now.TimeOfDay:t}\n" +
    "The current temperature is 76 degrees.\n";

await waitAndApologizeTask;
Console.WriteLine(output);

Task 返回类型(Task return type)#

Task 返回类型用于包含 return 语句的异步方法,其中的操作数是 TResult

在下面的示例中,GetLeisureHoursAsync 方法包含一个返回整数的返回语句。方法声明必须指定返回类型为 Task。FromResult 异步方法是返回 DayOfWeek 的操作的占位符。

参考#

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。