[英]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.