在后台线程上调用异步方法

时间:2016-10-10 12:12:24

标签: c# multithreading asynchronous

基本上我要做的是创建一个后台线程,从那时起异步执行。这是在MVC 5 Web应用程序中。

所以在下面的代码中我检查数据是否在缓存中,如果是,则返回该数据,然后创建一个后台线程,然后调用数据库,并从数据库返回此数据时(以异步方式完成)然后在缓存中设置数据。因此,从客户端调用服务器的下一次将获得更新的缓存数据。下一步是使用SignalR自动使用缓存数据更新客户端,但我还没有。

所以在我的代码中发生的事情是,如果缓存有数据,则创建后台线程,但线程永远不会在GetData方法中传递此行:

await SetDataInner();

获取它的任何帮助,以便在后台线程中的执行可以在SetDataInner()结算后继续吗?

*注意:我知道这是一个奇怪的设置,但数据库在很长时间内返回数​​据,我被迫实现这样的策略,至少向用户显示缓存数据,直到数据库最终返回数据。我知道你在想什么,数据库应该被修复以更快地返回数据,是的,这是长期目标,但我需要这样的东西在同一时间工作。

感谢您的帮助!

我的代码:

public async Task SetStuff(string cacheKey)
{
  var data = CacheHelper.Get(cacheKey) as Model;
  if (data != null)
  {
    Task.Run(() => SetData());          
    return;
  }

  // Set user info
  await SetData();

}

private async Task SetData()
{
  await SetDataInner();
}

0 个答案:

没有答案