.net-core中的Stackexchange.Redis超时异常

时间:2017-03-22 15:40:43

标签: c# .net asp.net-core-mvc .net-core stackexchange.redis

我将net 4库移植到net-core 1.0.0-preview 2

在开发我的net-core库时使用Stackexchange.Redis版本1.2.1,在net 4版本中使用1.2.0。

在net 4中,我的库在调用Redis命令时从未失败。

在net-core中,我随机收到此错误:

def build_table():
   ...
   #stuff that take time
   stuff = ...
   ...
   Clock.schedule_once(lambda dt: build_ui_table(stuff)) #since you can use the UI only from the main thread
threading.Thread(target=build_table).start()

更新我使用默认配置(连接超时,连接重试等)

UPDATE 添加了保持活动配置但仍然失败

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

解决方案:将SyncTimeout配置更新为10000.尝试使用5000并失败,然后使用10000并修复。默认值为1000。

答案 1 :(得分:1)

更新的SyncTimeout不是一个好选项,因为你的redis命令运行速度非常慢 超时的原因是线程池中的.net-core默认线程数太低。

只需在环境变量中设置maxThreads。

例如:

ComPlus_ThreadPool_ForceMaxWorkerThreads 1000 ComPlus_ThreadPool_ForceMinWorkerThreads 50

然后以管理员身份运行应用程序(允许应用程序读取系统环境变量)

对我有用

答案 2 :(得分:0)

您是否尝试过提升可用线程? (注意,这不是来自.Net核心项目,因此我不能100%确定语法是否相同。)

我在Global.asax.cs

中的{{1}}方法中有以下内容
{{1}}

答案 3 :(得分:0)

我在ASP MVC .NET Core 2.1项目中使用Microsoft.Extensions.Caching.Redis(2.1.2),并且在从服务pip install -r requirements.txt调用同步方法GetString(key)时也具有相同的TimeoutException。解决方案是调用异步方法:

IDistributedCache

问题不再发生。