gpt4 book ai didi

c# - 我连续调用多个异步方法是否正确?

转载 作者:太空宇宙 更新时间:2023-11-03 17:24:44 26 4
gpt4 key购买 nike

在启动过程中,我需要获取两组数据的应用程序,每组数据都有其异步方法。如果我一个一个调用它们,那么第二个调用只有在第一个调用完成后才会通过。

List<DataOne> DataCollectionOne;
List<DataTwo> DataCollectionTwo;

async void GetDatas()
{
if(sameCondOne)
DataCollectionOne = await GetDataOne();
if(sameCondTwo)
DataCollectionTwo = await GetDataTwo();
}

所以我将它们包装在任务调用中。

void GetDatas()
{
if(sameCondOne)
Task.Run(() => RunDataOne());
if(sameCondTwo)
Task.Run(() => RunDataTwo());
}

async void RunDataOne()
{
DataCollectionOne = await GetDataOne();
}

async void RunDataTwo()
{
DataCollectionTwo = await GetDataTwo();
}

我做得对吗?

最佳答案

没有。您不需要也不想启动一个新线程来负责启动这两个异步操作。只需启动这两个操作(调用方法就是启动操作的方式)并且在启动它们之前不要等待任何一个:

var firstTask = GetDataOne();
var secondTask = GetDataTwo();

var firstResult = await firstTask;
var secondResult = await secondTask;

要处理条件检查,只需有条件地启动任务,然后有条件地分配结果:

Task<T> firstTask = null;
if(shouldGetFirstTask)
firstTask = GetDataOne();
Task<T> secondTask = null;
if(shouldGetSecondTask)
secondTask = GetDataTwo();

if(firstTask != null)
DataCollectionOne = await firstTask;
if(secondTask != null)
DataCollectionTwo = await secondTask;

关于c# - 我连续调用多个异步方法是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21997937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com