2013-05-01 3 views
1

정적 메서드에서 Task.Run을 사용하고 싶습니다. 하지만 정적 메서드에서 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을 다시 호출하지 않을 때.

답변

3

UI 또는 ASP.NET 요청 스레드에서 호출 한 것으로 의심됩니다. 이 경우, on my blogin a recent MSDN article을 설명하면 교착 상태의 원인이되는 것은 Result입니다.

당신은 Result 대신 await를 사용해야합니다

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 다음 고려한다. 이 경우 GetSettingByNameGetSettingByNameAsync으로 바꿔 Task.Run 사용법으로 옮깁니다.

관련 문제