我想使用方法中的Task return在以后值可用时返回一个值,这样调用方就可以使用Wait来阻止或附加一个continuation,甚至可以等待它。我能想到的最好的方法是:
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是我想要的吗?我只是在让自己的生活变得艰难吗?