多线程、异步编程与数据结构优化
1. 实现对任务有更高级控制的 TAP
TPL(任务并行库)以Task和Task<TResult>对象为核心。我们可以通过调用Task.Run方法来执行异步任务,异步执行委托方法或代码块,并在该任务上使用Wait等方法。不过,这种方法并不总是足够的,在某些场景下,我们可能需要不同的方式来执行异步操作,例如使用基于事件的异步模式(EAP)或异步编程模型(APM)。为了实现任务异步模式(TAP)原则,并对使用不同模型执行的异步操作进行相同级别的控制,我们可以使用TaskCompletionSource<TResult>对象。
TaskCompletionSource<TResult>对象用于创建一个执行异步操作的任务。当异步操作完成时,我们可以使用TaskCompletionSource<TResult>对象来设置任务的结果、异常或状态。以下是一个基本示例:
static void Main(string[] args) { var t = ExecuteTask(); t.Wait(); Console.Read(); } public static Task<int> ExecuteTask() { var tcs = new TaskCompletionSour