gpt4 book ai didi

C# 线程机制

转载 作者:行者123 更新时间:2023-12-02 22:25:16 25 4
gpt4 key购买 nike

假设我有一个公开的接口(interface):

interface IMyService 
{
MyResult MyOperation();
}

此操作是同步的并返回一个值。

我实现的接口(interface)必须执行以下操作:

  • 调用异步方法
  • 等待事件 #1
  • 等待事件 #2

这是由于我正在使用的第 3 方 COM 对象所致。

此代码看起来类似于以下内容

public MyResult MyOperation()
{
_myCOMObject.AsyncOperation();

//Here I need to wait for both events to fire before returning
}

private void MyEvent1()
{
//My Event 1 is fired in this handler
}

private void MyEvent2()
{
//My Event 2 is fired in this handler
}

我的两个事件可以按任意顺序发生,这是相当随机的。

我可以使用什么正确的线程机制来同步它?在我不得不开始等待第二个事件之前,我正在使用 ManualResetEvent,并且还没有看到将其用于这两个事件的简单方法。这两个事件设置变量,使我能够为 MyOperation() 创建返回值。

对此有什么好的实现方案吗?我无法控制第 3 方对象的实现方式。

最佳答案

两个 ManualResetEvent 应该可以满足您的要求。只需在调用 _myCOMObject.AsyncOperation() 之前将它们初始化为 false。像这样:

private ManualResetEvent event1;
private ManualResetEvent event2;

public MyResult MyOperation()
{
event1 = new ManualResetEvent(false);
event2 = new ManualResetEvent(false);

_myCOMObject.AsyncOperation();

WaitHandle.WaitAll(new WaitHandle[] { event1, event2 });
}

private void MyEvent1()
{
event1.Set();
}

private void MyEvent2()
{
event2.Set();
}

编辑

感谢您的评论。我已将等待调用更改为使用 WaitAll

关于C# 线程机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1261425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com