【发布时间】:2011-05-27 21:43:59
【问题描述】:
我想使用一个方法中的任务返回来在以后可用时返回一个值,以便调用者可以使用等待阻塞或附加一个延续,甚至等待它。我能想到的最好的是:
public class Future<T> {
private ManualResetEvent mre = new ManualResetEvent();
private T value;
public async Task<T> GetTask() {
mre.WaitOne();
return value;
}
public void Return(T value) {
this.value = value;
mre.Set();
}
}
主要问题是 mre.WaitOne() 被阻塞,所以我假设每次调用 GetTask() 都会安排一个新线程来阻塞。有没有办法以异步方式等待 WaitHandle,或者是否已经有一个帮助器来构建等效功能?
编辑:好的,TaskCompletionSource 是我正在寻找的东西,我只是让自己的生活变得艰难吗?
【问题讨论】:
标签: c# task-parallel-library async-await async-ctp