asynchronous
IAsyncDisposable
带有单独的
Complete()
任务
Completion
执行单独的任务,然后Complete()
- ?
?
使用以下内容的陷阱是什么?
Completion
- 作为一个次要问题,我还想知道我是否应该在同步上下文中呼叫代码的情况下进行阻止等待?
我在异步工作中看到了一些基本问题:任务列表应为线程安全。
考虑到一个任务可以在_iscomplete检查后立即从pushworkasync切换到pushworkasync,在我们仍在等待其完成时,可能会添加一个新任务。
通过使用_iscomplete,您实际上是在尝试模仿代表所有推动任务完成的一般任务。为此,我们可以使用TaskCompletionsource,这是这种情况的常见用例。
每次触发PushWorkAsync时,您开始并解雇一项新任务。这意味着任务开始运行,然后在完成任务中,您等待所有这些任务完成。
当我们需要释放资源(例如物理资源,内存,处理人员等)时,应使用处置,但是您对处置的定义完全与完成一致,这与处置不同。
LLES说,我们需要实施处置,因为您没有提到过一些其他要求。在这种情况下,我们必须使用ComellationTokenSource终止所有任务,免费资源并管理取消过程。