StackExchange.Redis异步调用挂起

埃里克·史密斯

试图弄清楚为什么此代码挂起。我可以删除测试底部的3条线中的任何一条,它不会挂起,但是所有3条线都使其挂起。任何帮助将不胜感激!

[Fact]
public async Task CanAddValuesInParallel() {
    var muxer = ConnectionMultiplexer.Connect("localhost");
    var db = muxer.GetDatabase();

    await AddAsync(db, "test", "1");
    await db.KeyDeleteAsync("test");

    Task.Run(() => AddAsync(db, "test", "1")).Wait();
}

public async Task<bool> AddAsync(IDatabase db, string key, string value) {
    return await db.StringSetAsync(key, value, null, When.NotExists);
}
马克·格雷韦尔

对我来说,这听起来像是来自Wait的同步上下文死锁await这就是为什么您永远不会那样做的原因-(切换为“吉尔伯特和沙利文”):好吧,几乎没有!

如果有帮助,我怀疑awaitWait子树中删除会解决问题-这应该是微不足道的,因为该树可以用平凡的直通代替:

public Task<bool> AddAsync(IDatabase db, string key, string value) {
    return db.StringSetAsync(key, value, null, When.NotExists);
}

这里的重点是SE.Redis在内部绕过同步上下文(对于库代码而言是正常的),因此它不应具有死锁。

但最终:混合Waitawait是不是一个好主意。除了死锁,这是“异步同步”-一种反模式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Redis StackExchange缓存性能

来自分类Dev

StackExchange.Redis死锁

来自分类Dev

StackExchange Redis ConnectionString

来自分类Dev

StackExchange Redis搜索集合

来自分类Dev

StackExchange.Redis.RedisConnectionException

来自分类Dev

与StackExchange.Redis并行执行?

来自分类Dev

StackExchange Redis的分区键空间

来自分类Dev

StackExchange.Redis订阅恢复

来自分类Dev

StackExchange.Redis的奇数FileNotFoundException

来自分类Dev

StackExchange.Redis 中的 MSET

来自分类Dev

使用StackExchange.Redis的Redis密码

来自分类Dev

从StackExchange.Redis使用REDIS Sets命令

来自分类Dev

StackExchange.Redis:如何配置Redis实例

来自分类Dev

从StackExchange.Redis使用REDIS Sets命令

来自分类Dev

使用StackExchange.Redis的正确方法

来自分类Dev

StackExchange Redis-StringSet与SetAdd和Expiries

来自分类Dev

StackExchange.Redis事务方法冻结

来自分类Dev

StackExchange.Redis-禁用EVALSHA的使用?

来自分类Dev

StackExchange.Redis-LockTake / LockRelease的用法

来自分类Dev

StackExchange.Redis-LockTake / LockRelease的用法

来自分类Dev

StackExchange.Redis如何连接到Sentinel

来自分类Dev

StackExchange.Redis ListRightPop不等待结果

来自分类Dev

StackExchange.Redis-等待锁的最佳方法

来自分类Dev

StackExchange.Redis阻止弹出设计

来自分类Dev

这是StackExchange Redis管道的良好实现吗?

来自分类Dev

StackExchange.Redis:批量访问多个哈希

来自分类Dev

StackExchange.Redis中的过期回调

来自分类Dev

StackExchange.Redis事务链接参数

来自分类Dev

StackExchange.Redis是否支持MONITOR?