相关疑难解决方法(0)

C#中的异步/等待和并行

我何时应该使用async/await,何时应该在C#中使用parallel.foreach?并行和异步/等待是否有同样的目的?它们有什么不同?

asynchronous async-await parallel.foreach

36
推荐指数
1
解决办法
1万
查看次数

并行运行异步方法

我有一个异步方法,GetExpensiveThing()它执行一些昂贵的I/O工作.这就是我使用它的方式:

// Serial execution
public async Task<List<Thing>> GetThings()
{
    var first = await GetExpensiveThing();
    var second = await GetExpensiveThing();
    return new List<Thing>() { first, second };
}
Run Code Online (Sandbox Code Playgroud)

但由于这是一种昂贵的方法,我想并行执行这些调用.我本以为移动等待会解决这个问题:

// Serial execution
public async Task<List<Thing>> GetThings()
{
    var first = GetExpensiveThing();
    var second = GetExpensiveThing();
    return new List<Thing>() { await first, await second };
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,所以我将它们包装在一些任务中,这有效:

// Parallel execution
public async Task<List<Thing>> GetThings()
{
    var first = Task.Run(() =>
    {
        return GetExpensiveThing();
    });

    var second = Task.Run(() =>
    { …
Run Code Online (Sandbox Code Playgroud)

c# task-parallel-library async-await

17
推荐指数
2
解决办法
2万
查看次数

异步或并行任务 - C#

我有一个应用程序,我需要做两个I/O任务:获取GPS位置,通过蓝牙检索一些数据.这两项任务都可以在不同时间内完成,并且可能需要很长时间.为了提高应用程序的速度,我想同时启动两个活动,然后等待两个活动完成再继续.

如果我这样做:

bool locationStatus= await GetCurrentLocation();
bool vehicleStatus = await GetVehicleData();
Run Code Online (Sandbox Code Playgroud)

第二个功能是否被启动,或者只是未被阻止的UI?

我需要调用并行任务吗?

c# asynchronous task-parallel-library async-await

0
推荐指数
1
解决办法
200
查看次数