在 C# 中,异步操作可以通过以下几种方式实现:
Async/await 关键字是 C# 5.0 引入的异步编程模型,可以让开发者编写具有异步特性的代码,而无需使用回调函数或者线程等方式。使用 async 关键字来修饰方法,表明该方法是一个异步方法。使用 await 关键字等待异步操作完成,从而在异步操作完成之后再继续执行代码。
例如:
public async Task<int> GetNumberAsync() { await Task.Delay(1000); // 模拟异步操作 return 42; }
Task 类型表示一个异步操作的任务,可以用来表示异步操作的状态和结果。通过 Task 类型的 Wait 方法可以等待异步操作完成,或者通过 Task 类型的 ContinueWith 方法在异步操作完成后执行一些操作。
例如:
Task<int> task = Task.Run(() => { Thread.Sleep(1000); // 模拟异步操作 return 42; }); int result = task.Result; // 等待异步操作完成并获取结果
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的真正强大之处在于创建不会占用线程的任务.
2016 © donet5.comApache Licence 2.0