繁体   English   中英

如何在静态方法中使用Task.Run

[英]how to use a Task.Run in a static method

我想在静态方法中使用Task.Run。 但是当我在静态方法中调用task.run时,它会丢失。

  public static void TestLevel()
   {
       var UserSetting = Task.Run(async () =>
        {
            return await database.GetSettingByName("test");
        }).Result.Value;

        User objuser = new User();
        objuser.usersetting = UserSetting;
   }

当它调用task.run时它不会回来。

我怀疑你是从UI或ASP.NET请求线程调用它。 在这种情况下,正如我在博客最近的MSDN文章中解释的那样,导致死锁的Result

您应该使用await而不是Result

public static async Task TestLevelAsync()
{
    var UserSetting = await Task.Run(async () =>
    {
        return await database.GetSettingByName("test");
    });

    User objuser = new User();
    objuser.usersetting = UserSetting.Value;
}

另外,请考虑遵循基于任务的异步模式 在这种情况下,您可以将GetSettingByName重命名为GetSettingByNameAsync并将任何Task.Run用法移动到该方法中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM