2014-01-06 54 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

是的,这是有效的,但它几乎是唯一一个在'async'' Task'上调用'Result'(或'Wait()')的好主意的情况。在大多数情况下,这样做会导致死锁。 – svick

+0

@svick。然后给出一个更好的方法来编写这段代码。事实上,这是我第一次写异步代码并等待。在这个领域,对我而言,一切都还是新的。 – Richard77

+0

在这个特定情况下(控制台应用程序运行'async'代码),使用'Result' *是正确的方法。但在大多数情况下,事实并非如此。 – svick

相关问题