我想在静态方法中使用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时它不会回来。
答案 0 :(得分:3)
我怀疑你是从UI或ASP.NET请求线程调用它。在这种情况下,导致死锁的是Result
,因为我解释了on my blog和in a recent MSDN article。
您应该使用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;
}
另外,请考虑遵循Task-based asynchronous pattern。在这种情况下,您可以将GetSettingByName
重命名为GetSettingByNameAsync
,并将任何Task.Run
用法移至该方法中。