【问题标题】:Problem with calling 4 async method paralel in constructor [closed]在构造函数中并行调用4个异步方法的问题[关闭]
【发布时间】:2020-07-08 14:58:55
【问题描述】:

我在c#中的任务有问题,不知道如何使用asyncawait。我有 4 种方法,例如:

private async Task Name(parameters) {}

如何在构造函数中同时运行所有 4 个方法,以减少执行时间并优化 cpu 使用率。

我试过Parallel.Invoke(() =>,但这不是最好的解决方案......

【问题讨论】:

  • Task.WhenAll()?
  • 你有什么问题?你有错误吗?是否只想知道如何并行调用四个async 方法?
  • 是的,在构造函数视图模型页面中调用4个任务方法并行执行并等待完成。

标签: c# web xamarin.forms async-await task


【解决方案1】:

您可以使用此示例代码:

Task[] tasks = new Task[4];
tasks[0] = Method0();
tasks[1] = Method1();
tasks[2] = Method2();
tasks[3] = Method3();
await Task.WhenAll(tasks);// If you have to wait all the tasks to be finished.
//await Task.WhenAny(tasks); //If any of them finished.

更新:

这是完整的答案:

static async Task<List<int>> MethodTest(int i)
{
    await Task.Delay(10);
    return new List<int>() { i, i, i };
}
async Task method()
{
    Task<List<int>>[] tasks = new Task<List<int>>[4];
    tasks[0] = MethodTest(0);
    tasks[1] = MethodTest(1);
    tasks[2] = MethodTest(2);
    tasks[3] = MethodTest(3);
    await Task.WhenAll(tasks);
    Console.WriteLine(tasks[0].Result);
}

【讨论】:

  • 嗨,谢谢你的回答,但是......在Task.WhenAll(tasks)之后......我有一个方法,我正在使用完成任务后需要从web api获得结果的列表,但是列表是空的,并且我的异常索引超出范围....我进行了调试并看到了这一点,但是我注意到在调试过程中,当捕获异常列表获取数据时...但是对我来说为时已晚...如何解决这个问题?
  • 我更新答案,检查一下,如果有任何问题,请告诉我。
  • 抱歉,我不确定如何在我的项目中实现此代码:OnLoadPrometDanKorisnikDatum(KorisnikID, PomocnaDnDDatnaDat, DatumVrednost);我有 4 种类似的方法以及如何实现 MethodTest? MethodTest 是否只是为 await Task.Delay(10) 创建的?
  • 我无权访问您的项目! :) 你的问题是什么?
  • 你能远程访问我的电脑对抗 TeamWeaver,看看会发生什么吗?
猜你喜欢
  • 2014-05-27
  • 2020-12-26
  • 2022-11-06
  • 2019-12-11
  • 2015-11-21
  • 2017-10-18
  • 2015-05-17
相关资源
最近更新 更多