小编Cem*_*m.S的帖子

将 ManualResetEvent 与异步代码一起使用是否错误?

我正在寻找同步任务的最佳实践(甚至不确定这在语义上是否正确,我可能应该说用异步代码同步线程)。

采取以下代码:

Task.Run(async () => await lib.WaitAsync());
Task.Run(async () => await lib.WaitAsync());
Task.Run(async () => await lib.WaitAsync());

// Synchronize all waiters
lib.Release();

// All Tasks shall be completed
Run Code Online (Sandbox Code Playgroud)

在使用线程时,我曾经使用ManualResetEvent. 所以我的第一个(简化的)方法是:

Task WaitAsync()
{
   await Task.Run(() => manualResetEvent.WaitOne());
} 

void Release()
{
   manualResetEvent.Set();
} 
Run Code Online (Sandbox Code Playgroud)

现在我看到人们已经实现了自己的 async ManualResetEvent

原始方法有什么问题以及为什么有人更喜欢异步实现?是因为取消了吗?异常展开/处理?

更一般地说,在异步代码中使用常规线程同步对象(互斥量、信号量等)是否有任何缺点?

谢谢

c# multithreading asynchronous

2
推荐指数
1
解决办法
3980
查看次数

标签 统计

asynchronous ×1

c# ×1

multithreading ×1