使用Task.Run()时如何避免OutOfMemoryException



启动时调用此方法时,会出现OutOfMemoryException。StartSignalR方法应该运行一个Task,该Task每秒调用Update((方法。

public void StartSignalR()
{
Task t = Task.Run(() =>
{
try
{
bool push = true;
while (push)
{
Update();
}
}
catch (System.Exception ex)
{
LogManager.LogError(ex);
}
});
}

我使用任务延迟更新((

private async static void Update()
{
await Task.Delay(1000);

Updater.MPrice();
}

要使Task.Delay真正等待,必须将lambda声明为async,并将await声明为Update方法。

public void StartSignalR()
{
//added async
Task t = Task.Run(async () =>
{
try
{
bool push = true;
while (push)
{
//await the Update method
await Update();
}
}
catch (System.Exception ex)
{
LogManager.LogError(ex);
}
});
}

通过此更改,您的Update方法必须返回Task

//changed signature
private async static Task Update()

这很可能会减少内存占用,因为目前您正在疯狂地启动Update方法。

最新更新