2014-01-06 5 views
0

비동기 작동 방식을 이해하려고합니다. 내 코드는 다음과 같습니다.키워드 대기 및 게재 방법

class Program 
{ 
    static void Main(string[] args) 
    { 
     Task<string> strReturned = returnStringAsync(); 
     Console.WriteLine("hello!"); 
     string name = await strReturned; //error: The 'await' operator can only be used 
             //within an async method. Consider marking this 
             //method with the 'async' modifier and changing 
             //its return type to 'Task' 

     Console.WriteLine(name); 
    } 

    static async Task<string> returnStringAsync() 
    { 
     Thread.Sleep(5000); 
     return "Richard"; 
    } 
} 

뭐가 잘못 됐나요?

+3

작동? – poke

+0

strReturned 옆에 오류가 있습니다. – Richard77

+0

나는 그것을 보았지만 오류 메시지는 당신이 시도한 것에 무엇이 잘못되었는지를 아주 잘 설명한다. 그래서 무엇을 얻지 못했습니까? – poke

답변

1

이것은 오류가 당신을 말한 무엇을 이해하지 못했다 그래서

class Program 
{ 
    static void Main(string[] args) 
    { 
     Task<string> str = returnStringAsync(); 
     Console.WriteLine("hello!"); 

     string name = str.Result; 

     Console.WriteLine(name); 
    } 

    static async Task<string> returnStringAsync() 
    { 
     await Task.Delay(5000); 
     return "Richard"; 
    } 
} 
+2

예,이 방법이 효과적이지만,'비동기''Task'에서'Result' (또는'Wait()')를 호출하는 것이 좋습니다. 대부분의 다른 경우에 교착 상태가 발생합니다. – svick

+0

@svick. 그런 다음이 코드를 작성하는 더 좋은 방법을 제공하십시오. 사실, 비동기식으로 코드를 작성하고 기다리는 것은 이번이 처음입니다. 그 분야에서 모든 것은 여전히 ​​나에게 새롭다. – Richard77

+0

이 특별한 경우 ('async' 코드를 실행하는 콘솔 어플리케이션)에서는'Result' *를 사용하는 것이 올바른 방법입니다. 하지만 대부분의 다른 경우에는 그렇지 않습니다. – svick