261得票11回答
何时应该使用TaskCompletionSource<T>?

据我所知,它只知道在某个时间点调用了其SetResult或SetException方法以完成通过其Task属性公开的Task&lt;T&gt;。 换句话说,它充当Task&lt;TResult&gt;和其完成的生产者。 我在这里看到了以下示例: 如果我需要一种异步执行Func&lt;T...

40得票3回答
如何结合使用TaskCompletionSource和CancellationTokenSource?

我有这样的代码(在此处进行了简化),等待完成任务:var task_completion_source = new TaskCompletionSource&lt;bool&gt;(); observable.Subscribe(b =&gt; { if (b) ...

35得票2回答
使用TaskCompletionSource实现异步方法的超时

我有一个黑匣子对象,其中包含一个触发异步操作的方法,当操作完成后会触发一个事件。我使用TaskCompletionSource将其封装成Task&lt;OpResult&gt; BlackBoxOperationAsync()方法 - 这个方法很有效。 但是,在这个异步包装器中,如果在给定的...

23得票5回答
Task FromResult与TaskCompletionSource SetResult的区别

在SendAsync方法中,使用TaskCompletionSource + SetResult与Task + FromResult的功能和意义有何区别?protected override Task&lt;HttpResponseMessage&gt; SendAsync(HttpReque...

19得票1回答
如何在使用TaskCompletionSource.SetException时保留await行为?

(这是对该问题的新尝试,现在更好地展示了该问题。) 假设我们有一个出现故障的任务 (var faultedTask = Task.Run(() =&gt; { throw new Exception("test"); });) 并且我们等待它。 await 将解包 AggregateExce...

19得票3回答
任务完成源代码抛出“尝试在任务已经完成时将任务转换为最终状态”的异常。

我想使用TaskCompletionSource来包装一个简单服务MyService:public static Task&lt;string&gt; ProcessAsync(MyService service, int parameter) { var tcs = new Task...

13得票1回答
TaskCompletionSource与TaskCreationOptions的目的是什么?

我对 TaskCompletionSource&lt;&gt; 的内部工作原理存在一些不清楚的地方。 在使用 Factory 创建一个简单的 Task&lt;&gt; 时,我期望这个任务将被排队到线程池中,除非我指定了 TaskCreationOptions.LongRunning,在这种情...

11得票2回答
如何使用超时取消一个TaskCompletionSource

我有一个使用await关键字异步调用的函数:public Task&lt;StatePropertyEx&gt; RequestStateForEntity(EntityKey entity, string propName) { var tcs = new TaskCompletio...

9得票3回答
为什么我的TCS不等待?

async关键字确实会改变CIL(即使方法内没有await),但其主要作用是允许使用await。然而,我并没有预料到会发生以下情况: static void Main(string[] args) { Task t = Go(); t.Wait(); } static as...