我正在开发一个小项目,我需要一个接一个地进行两个异步调用.
我的代码看起来像这样:
AsynchronousCall1();
AsynchronousCall2();
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是两个调用都需要一到两秒的时间来执行,我永远不知道哪一个会完成最后一个.我正在寻找的是一种确定谁最后完成的方法.如果Call1()最后完成,我会做一件事.如果Call2()最后完成,我会做另一件事.
这是使用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)