【发布时间】:2020-12-28 10:58:46
【问题描述】:
当我在启动时调用此方法时出现 OutOfMemoryException。 StartSignalR 方法应该运行一个每秒调用 Update() 方法的任务。
public void StartSignalR()
{
Task t = Task.Run(() =>
{
try
{
bool push = true;
while (push)
{
Update();
}
}
catch (System.Exception ex)
{
LogManager.LogError(ex);
}
});
}
我在 Update() 中使用 Task.Delay
private async static void Update()
{
await Task.Delay(1000);
Updater.MPrice();
}
【问题讨论】:
-
Task.Run肯定不会导致 OOM 异常。你需要查看和调试你的代码,你在某处有内存泄漏 -
@CamiloTerevinto 如果我不调用此方法,则不会发生 OOM
-
您可能每秒调用
Update()数百万次,因此Updater.MPrice()中的任何内容都会在某处泄漏内存,或者创建足够大的对象以使您的系统内存不足。您需要await拨打Update -
请分享minimal reproducible example,包括
MPrice的源代码。 -
另外,您忘记在
Update上调用await,Update应该返回Task而不是void。
标签: c# multithreading task