[英]Visual Studio Warning when using Stackexchange.Redis Async methods inside a Transaction
我有以下代码:
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);
上面的代码位于一个名为async的异步方法中:
公共异步任务CacheMessagesAsync(....)
VS 2013下划线显示了三个trans.XXX命令,并显示警告:
因为不等待此调用,所以在调用完成之前将继续执行当前方法。 考虑将“ await”运算符应用于调用结果。
虽然最后一条命令
返回等待trans.ExecuteAsync(flags);
表示该方法等待上述命令。 为什么我会收到警告? 这与Stackexchange.Redis Api调用的实现有关吗,或者我缺少有关编写正确的CTP代码的信息?
您正在等待的只是异步方法之一。 您可能应该以某种方式等待所有方法,以使其他三个方法在代表该方法的任务完成时完成。
如果在下一个任务开始之前完成每个任务很重要,则只需await
所有任务即可。
如果你只需要运行所有的人,但他们都可以并行运行,那么你可以通过它们全部Task.WhenAll
,等待这一点 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.