1

我有以下代码:

var trans = conn.CreateTransaction();
trans.StringSetAsync(keyValuePairs, flags: flags);
trans.SortedSetAddAsync(KeyForAllMessages(), messages.Select(m => new KeyValuePair<RedisValue, double>(m.id, m.id)).ToArray());
trans.SortedSetAddAsync(threadKey, messages.Select(m => new KeyValuePair<RedisValue, double>(m.id, m.id)).ToArray()).GetAwaiter();
return await trans.ExecuteAsync(flags);

上面的代码在一个名为的异步方法中:

公共异步任务 CacheMessagesAsync(....)

VS 2013 下划线了三个 trans.XXX 命令,并显示警告状态:

由于不等待此调用,因此在调用完成之前继续执行当前方法。考虑将“等待”运算符应用于调用结果。

虽然最后一个命令

返回等待 trans.ExecuteAsync(flags);

表示该方法等待上述命令。为什么我收到警告?这是否与 Stackexchange.Redis Api 调用的实现有关,或者我错过了编写正确 CTP 代码的一些内容?

4

1 回答 1

4

您正在等待其中一种异步方法。您可能应该以某种方式等待所有方法,以便其他三个在代表此方法的任务完成时完成。

如果每个任务在下一个任务开始之前完成很重要,那么就await全部完成。

如果您只需要运行所有这些但它们都可以并行运行,那么您可以将它们全部传递给并Task.WhenAll等待

于 2014-03-21T16:56:26.477 回答