Joa*_*nge 0 .net c# performance asynchronous async-await
我正在尝试以不阻塞程序的方式编写此代码。client.Spot.Market.GetKlinesAsync 支持 await 但不确定如何构建代码以便等待。
public static async Task GetMinMaxValues ( BinanceClient client, ObservableCollection<Coin> coins )
{
foreach ( var coin in coins )
{
var task = client.Spot.Market.GetKlinesAsync ( coin.SymbolPair, KlineInterval.OneDay );
coin.MinVal = klines.Result.Data.Select ( k => k.Low ).Min ( );
coin.MaxVal = klines.Result.Data.Select ( k => k.High ).Max ( );
}
}
Run Code Online (Sandbox Code Playgroud)
让我感到困惑的是我如何实现这一点,因为我需要能够计算最小值和最大值。因此,如果我访问 Result,该函数会立即执行,对吗?
所以我无法理解如何并行实现这个计算。
只需创建嵌套异步操作以获得 single 的最小值/最大值Coin,然后并行运行所有:
public static async Task GetMinMaxValues ( BinanceClient client,
ObservableCollection<Coin> coins )
{
await Task.WhenAll(coins.Select(async c=>await GetMinMax(c, client)).ToList());
}
public static async Task GetMinMax(Coin coin, BinanceClient client)
{
var res = await client.Spot.Market.GetKlinesAsync ( coin.SymbolPair );
coin.MinVal = klines.Result.Data.Select ( k => k.Low ).Min ( );
coin.MaxVal = klines.Result.Data.Select ( k => k.High ).Max ( );
}
Run Code Online (Sandbox Code Playgroud)
这种方法的危险在于,如果你有很多Coins,你会在一个时刻创建一大堆任务。如果是这种情况,那么您可以另外对适当大小的块执行某种工作分区。
| 归档时间: |
|
| 查看次数: |
130 次 |
| 最近记录: |