我想使用方法中的 Task return 在稍后可用时返回该值,以便调用者可以使用 Wait 阻止或附加延续,甚至等待它。我能想到的最好的是:
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 是我正在寻找的东西,我只是让自己的生活变得艰难吗?