c# - 是否可以同步调用异步调用?

标签 c# asynchronous delegates

我在下面放置了一些非常基本的代码来说明我正在尝试做的事情。我有执行异步操作的“DoSomethingAshnc”方法。我希望“DoSomething”方法是一个不接受操作参数并返回 int 的同步方法。

public void DoSomething(Action<int> actionToPerformOnComplete)
    {
        DoSomethingAsync(delegate(int val)
            {
                actionToPerformOnComplete(val);
            });
    }

是否有可能让“DoSomething”返回一个整数,就好像该方法是同步发生的一样?

最佳答案

您需要在同步方法的末尾添加一些内容,告诉它等待其他调用完成。我假设您的异步方法将有一个事件来告诉调用者它何时完成。

如果是这样,那么我建议使用类似 ManualResetEvent 的东西,在同步线程中等待它,然后在异步线程的 Finish 事件接收器中设置它。

例子:

public void DoSomething(Action<int> actionToPerformOnComplete)
{
   ManualResetEvent mre = new ManualResetEvent(false);
   DoSomethingAsync(delegate(int val)
   {
      try
      {
         actionToPerformOnComplete(val);
      }
      finally
      {
         mre.Set();
      }
   });
   mre.WaitOne();
}

关于c# - 是否可以同步调用异步调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5540669/

相关文章:

swift - 如何使用委托(delegate)从 UIviewController 获取值而不实例化对象

objective-c - 关闭 ViewController + Table ViewController + Master-Detail 应用程序

c# - 委托(delegate)返回类型与 lambda 函数不同

c# - 在 Windows 7 上访问文件系统上的每个文件(无论如何)

c# - 在 EF6 中将匿名类型转换为 IEnumerable<>

ios - 使用 Parse 异步显示图像时出错

python - 如何从池中获取第一个完成的异步结果

c# - 在 C#(WPF) 中使用 C++ dll

c# - 使用 Ninject 和 Web API 2.1 注入(inject) API Controller 时出现 InvalidOperationException

ios - GCD 实现不适用于 PARSE 查询 (Swift)