C#任务完成源

C#任务完成源,c#,task-parallel-library,taskcompletionsource,C#,Task Parallel Library,Taskcompletionsource,我有一个关于问题陈述的需求,比如说,当一个事件被触发时,我必须调用一个任务完成源,使用async和Wait。将发生多个事件,每次事件发生时都必须调用此任务完成。(同时会有多个任务发生,并提高任务完成率) 例如,有与这些形状对应的几何形状和空格。当将这些对象形状放入此空间时,将触发一个事件,从而引发任务完成源 因此,我们希望实现一个程序,该程序使用任务完成源,基于发生的事件、依赖项注入、系统事件/通知以及检查事件是否完成(对于多个事件) 希望我清楚这些要求,但由于问题陈述有点棘手,因为它涉及到很多

我有一个关于问题陈述的需求,比如说,当一个事件被触发时,我必须调用一个任务完成源,使用async和Wait。将发生多个事件,每次事件发生时都必须调用此任务完成。(同时会有多个任务发生,并提高任务完成率)

例如,有与这些形状对应的几何形状和空格。当将这些对象形状放入此空间时,将触发一个事件,从而引发任务完成源

因此,我们希望实现一个程序,该程序使用任务完成源,基于发生的事件、依赖项注入、系统事件/通知以及检查事件是否完成(对于多个事件)

希望我清楚这些要求,但由于问题陈述有点棘手,因为它涉及到很多TPL异步概念,所以我尽力解释,因此给出了上述形状游戏的类比

任何有用的建议/链接/建议都会很好


提前谢谢

一个任务完成源只能完成一次。 就你而言,这听起来不是正确的解决方案。看看SemaphoreSlim,它支持异步,并且是线程无关的。它将允许您在每次事件发生时释放一个等待线程(WaitAsync)(将一个形状放在一个空间中)


但是您忘了提到(或者我不清楚)使用
TaskCompletionSource
可以解决什么问题。这似乎是一个问题,如果我有多个任务使用“With”或“ContinueWith”,就会发生很多线程死锁。因此,您希望在每次事件完成或发生时实现通知触发器。您是否有任何代码可共享,以便我们有一个起点?嘿,谢谢您的回复。但是使用“Wait”就像是对性能的冲击。在使用task parallel library时有没有避免这种情况的方法?是的,SemaphoreSlim有一个WaitAsync方法,它使用TPL,不会阻塞线程池线程。