c# - c#有更好的等待模式吗?

标签 c# multithreading design-patterns

我发现自己编写过几次这种类型的代码。

for (int i = 0; i < 10; i++)
{
   if (Thing.WaitingFor())
   {
      break;
   }
   Thread.Sleep(sleep_time);
}
if(!Thing.WaitingFor())
{
   throw new ItDidntHappenException();
}

它看起来像糟糕的代码,是否有更好的方法/这是糟糕设计的症状?

最佳答案

实现此模式的更好方法是让您的 Thing 对象公开一个消费者可以等待的事件。例如 ManualResetEventAutoResetEvent。这大大简化了您的消费者代码如下

if (!Thing.ManualResetEvent.WaitOne(sleep_time)) {
  throw new ItDidntHappen();
}

// It happened

Thing 端的代码也并不复杂。

public sealed class Thing {
  public readonly ManualResetEvent ManualResetEvent = new ManualResetEvent(false);

  private void TheAction() {
    ...
    // Done.  Signal the listeners
    ManualResetEvent.Set();
  }
}

关于c# - c#有更好的等待模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6997291/

相关文章:

objective-c - 在Objective-C中定时和重复执行线程

android - 从 Service 和 onClick 访问 sqlite 数据库 android 时发生冲突

.net - 是否有 NOSQL 数据层设计模式?

c# - 如何设计这样的项目?

design-patterns - 如何使用依赖注入(inject)和存储库处理工作单元

c# - 显示 ComboBoxItem 的工具提示 - 移动鼠标后有效,但不是第一次尝试

c# - 为什么使用 AsQueryable() 而不是 List()?

c# - 从 BaseClass 中的子类获取自定义属性 (C# .NET 4.0)

java - Java 中具有并行化的链式过滤器

C# COM 互操作 : How to translate instructions from C++?