异步调用新手问题

cos*_*son 2 c# asynchronous

我正在开发一个小项目,我需要一个接一个地进行两个异步调用.

我的代码看起来像这样:

AsynchronousCall1();
AsynchronousCall2();
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是两个调用都需要一到两秒的时间来执行,我永远不知道哪一个会完成最后一个.我正在寻找的是一种确定谁最后完成的方法.如果Call1()最后完成,我会做一件事.如果Call2()最后完成,我会做另一件事.

Gro*_*roo 6

这是使用a lock确保只有一个线程可以输入一段代码的简单示例.但这是一个通用的例子,可能是也可能不是最适合您的应用程序.在您的问题中添加一些详细信息,以帮助我们找到您要查找的内容.

 void AsynchronousCall1()
 {
      // do some work
      Done("1");
 }

 void AsynchronousCall2()
 {
      // do some work
      Done("2");
 }

 readonly object _exclusiveAccess = new object();
 volatile bool _alreadyDone = false;
 void Done(string who)
 {
      lock (_exclusiveAccess)
      {
           if (_alreadyDone)
               return;

           _alreadyDone = true;
           Console.WriteLine(who + " was here first");
      }
  }
Run Code Online (Sandbox Code Playgroud)