异步类型

在 C# 中,异步操作可以通过以下几种方式实现:


Async/await 关键字

Async/await 关键字是 C# 5.0 引入的异步编程模型,可以让开发者编写具有异步特性的代码,而无需使用回调函数或者线程等方式。使用 async 关键字来修饰方法,表明该方法是一个异步方法。使用 await 关键字等待异步操作完成,从而在异步操作完成之后再继续执行代码。

例如:

public async Task<int> GetNumberAsync()
{
    await Task.Delay(1000); // 模拟异步操作
    return 42;
}



Task 类型

Task 类型表示一个异步操作的任务,可以用来表示异步操作的状态和结果。通过 Task 类型的 Wait 方法可以等待异步操作完成,或者通过 Task 类型的 ContinueWith 方法在异步操作完成后执行一些操作。

例如:

Task<int> task = Task.Run(() =>
{
    Thread.Sleep(1000); // 模拟异步操作
    return 42;
});
int result = task.Result; // 等待异步操作完成并获取结果



TaskCompletionSource 类型

TaskCompletionSource 类型提供了一种手动创建 Task 对象的方式,可以用来表示异步操作的状态和结果。通过 TaskCompletionSource 类型的 SetResult 方法设置异步操作的结果,从而使得异步操作的任务状态变为已完成。

var tcs = new TaskCompletionSource<int>();
new Thread (() =>     {
                       Thread.Sleep (5000); 
                       tcs.SetResult (42); 
                      })    
           .Start();   
Task<int> task = tcs.Task;    // Our "slave" task. 
Console.WriteLine(task.Result);  // 42

TaskCompletionSource的真正强大之处在于创建不会占用线程的任务.

果糖网