2015-04-01 25 views
-1

我正在學習異步編程,我不確定我是否正朝着正確的方向前進。我想調用多個方法異步,但從我讀取asyn應該從頂級後續開始到最低級別。但在頂級的時候,我做asyn方法編譯器抱怨不能等待字符串。asyn示例調用多種方法

public static async void Method() 
    { 
     var classdemoAsyn = new DemoAsyn(); 
     var t = await classdemoAsyn.DoSomeImportantWork("Start ").Result; 
    } 

public class DemoAsyn 
{ 
    public async Task<string> DoSomeImportantWork(string strDoSomeWork) 
    { 
     strDoSomeWork = strDoSomeWork + " (1) Enter => so some important work"; 
     Console.WriteLine("**********Enter => so some important work******"); 
     var t = await SomeComplexOperation(strDoSomeWork); 
     Console.WriteLine("***********End Do some important work***********"); 
     return t; 
    } 

    public Task<string> SomeComplexOperation(string StrDoSomeComplexWork) 
    { 
     string str =StrDoSomeComplexWork + "Enter => very very complex work"; 
     Console.WriteLine(str); 
     return Task.Factory.StartNew(() => {return str; }); 
    } 

} 
+0

這是什麼類型的應用程序(UI或ASP.NET)?此外,您的「工作」CPU限制或I/O? – 2015-04-01 12:18:29

+2

由於您正在等待任務的「結果」而不是任務本身,因此會出現編譯器錯誤。刪除'.Result',那個錯誤應該消失,儘管你的代碼還有其他問題。 – 2015-04-01 12:22:25

+0

它是一個小型的控制檯應用程序,@StephenCleary。我只是開始學習異步所有我想要實現的方法asyn從頂層到底層開始寫幾個方法。 – Milas 2015-04-01 13:25:36

回答

0

你得到的錯誤是因爲您使用.Resultawait在同一時間(如已經指出的丹尼爾·凱利)。

一種常見的簡單的方法,在控制檯應用程序使用async是有一個頂層async Task方法,在你Main()方法就可以同步等待(其實這就是唯一的地方,在async- Wait()Result有意義使用代碼),例如:

void Main() 
{ 
    MainAsync().Wait(); 
} 

另一種選擇是使用Stephen Cleary's AsyncContext.Run()