【发布时间】:2015-04-22 22:31:02
【问题描述】:
我正在尝试使用 Parallel.For 和异步等待将一些任意 GPS 数据(1.5 亿条记录)加载到 Azure 表存储中。但我在第一个等待语句中收到以下错误:
“await”运算符只能在异步 lambda 表达式中使用。考虑用 'async' 修饰符标记这个 lambda 表达式。
这是我的代码:
private static async Task GenerateGpsPointsForTruckAsync(int counter, CloudTableClient tableClient)
{
// Create a dummy VIN
string vin = counter.ToString("D17");
Random random = new Random();
DateTime start = new DateTime(2010, 1, 1);
int range = (DateTime.Today - start).Milliseconds;
// Create the batch operation.
TableBatchOperation batchOperation = new TableBatchOperation();
// Prepare 10 batches of 100 GPS points
Parallel.For(0, 10, i =>
{
for (int j = 0; j < 99; j++)
{
Location location = new Location(vin, start.AddDays(random.Next(range)).ToString());
location.Coordinates = new GeoCoordinate(random.Next(30, 45), random.Next(75, 100));
batchOperation.Insert(location);
}
await Task.Run(async () =>
{
await LoadGpsPointsForTruckAsync(tableClient, batchOperation);
});
});
}
我在 Stack Overflow 上查看了一些解决方案,但它们似乎对我不起作用。
【问题讨论】:
-
什么似乎不起作用?
-
我认为您在
Parallel.For(0, 10, i => ...行上创建的 lambda 上错过了async修饰符。你可以尝试在那里添加一个吗? -
你为什么要做
await Task.Run(...而不是简单的await LoadGpsPointsForTruckAsync(...);
标签: c# azure asynchronous lambda async-await