是否可以同步调用异步调用?

JSp*_*ang 3 c# delegates asynchronous

我已经在我想要做的事情下面放了一些非常基本的代码.我有'DoSomethingAshnc'方法执行异步操作.我希望'DoSomething'方法是一个不接受action参数并返回int的同步方法.

public void DoSomething(Action<int> actionToPerformOnComplete)
    {
        DoSomethingAsync(delegate(int val)
            {
                actionToPerformOnComplete(val);
            });
    }
Run Code Online (Sandbox Code Playgroud)

是否甚至可以让'DoSomething'返回一个整数,就像方法同步发生一样?

Ian*_*Ian 6

您需要在同步方法的最后添加一些内容,告诉它等待另一个调用完成.我假设您的异步方法将有一个事件告诉调用者何时完成.

如果是这样,那么我建议使用类似于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();
}
Run Code Online (Sandbox Code Playgroud)