【发布时间】:2021-02-04 22:00:48
【问题描述】:
我正在尝试实现代码以并行运行两个任务。 任务返回的值分配给两个不同的局部变量,任务完成后需要使用。
这是我所拥有的:
var return1 = new ReturnType1();
var task1 = Task.Run(async() =>
{
return1 = await MyAPI.GetSomeData(param1);
});
var return2 = new ReturnType2();
var task2 = Task.Run(async() =>
{
return2 = await MyApi.GetSomeOtherData(param2);
});
var tasks = new List<Task>();
tasks.Add(task1);
tasks.Add(task2);
await Task.WhenAll(tasks);
bool isNotNullReturn1 = return1 != null;
bool isNotNullReturn2 = return2 != null;
// And just to check return types have been assigned
Console.WriteLine($"{isNotNullReturn1.ToString(), {isNotNullReturn2.ToString()}}");
-
这些任务会并行运行吗?
我不确定各个任务中的 await 会发生什么?它们会在单独的后台线程上运行,每个线程并行等待各自的结果,从而按预期运行吗?或者他们会因为等待而按顺序运行? -
单独的问题,但我的研究并没有明确这一点。 “await”是否总是创建一个与 UI 不同的线程,与“Task.Run”相同?
这是正确的方法吗? 请建议/纠正。
【问题讨论】:
-
1.是的,这些任务将并行运行。您可以阅读有关Threads and threading 的文档。 2. await 是一个运算符,我不认为 'await' 创建单独的线程,它只是 C# 中的语法。阅读this document about await。
标签: multithreading xamarin asynchronous async-await