如何避免在使用aync-await时在c#中同时启动两个任务时发生冲突



当我们在另一个异步方法中调用异步方法时,有时很少有任务发生冲突。

如果EventReceiverAsync的两个任务同时运行。例如,getData(1(和getData(2(并行运行。如果getData(2(响应比getData(1(快。在这种情况下,objPayload甚至会获取getData(2(响应用于任务1。有时会发生冲突。


private async Task EventReceiverAsync(ID)
{
Payload objPayload = await getData(ID);
}

private async Task<Payload> getData(string ID)
{
Payload objOutput= new Payload ();
objOutput = await CallAPI("/api/getapidata", ID);
return objOutput;
}

有没有办法通过任何Id或其他东西根据任务对输出进行分类?

例如,getData(1(和getData(2(并行运行。如果getData(2(响应比getData(1(快。在这种情况下,objPayload甚至为task1获取getData(2(响应。

这在您发布的代码中是不可能的。EventReceiverAsync有两个调用,每个调用都有自己的objPayload变量。无论完成顺序如何,任务1的objPayload将接收getData(1)的结果,而任务2的objPayload将接收getData(2)的结果。

只要您的代码返回其结果,混合结果就不会发生。然而,如果您的代码将某个共享变量设置为其";结果";,那么共享将必须由您来管理,以避免混淆结果。