2014-09-01 174 views
-2

嘗試一些async方法時,出現以下錯誤。我下面這個例子:Microsoft Async Example異步/等待方法的錯誤

「等待」經營者只能異步方法

方法的「等待」是爲非同步內使用,我認爲這幾乎是一樣的微軟的例子。

我在做什麼錯在這裏?

按鈕單擊

private void btn_Async_Click(object sender, EventArgs e) 
    { 
     GeneralFeatures gf = new GeneralFeatures(); 
     Task<long> getLongRunningData = gf._Async(); 

     long answer = await getLongRunningData ; 
    } 

異步方法

class GeneralFeatures 
{ 
public async Task<long> _Async() 
    { 
     ///// LONG RUNNING TASK ///////// 
     int count = 0; 
     int j = 1101000; 
     long a = 2; 
     while (count < j) 
     { 
      long b = 2; 
      int prime = 1;// to check if found a prime 
      while (b * b <= a) 
      { 
       if (a % b == 0) 
       { 
        prime = 0; 
        break; 
       } 
       b++; 
      } 
      if (prime > 0) 
       count++; 
      a++; 
     } 
     ///// LONG RUNNING TASK ///////// 

     return a; 
    } 
} 
+2

'private void btn_Async_Click'確切地告訴我你把它定義爲'async'的位置。 – 2014-09-01 14:23:55

回答

2

你不能有await如果方法簽名不具有async

沒有asyncprivate void btn_Async_Click(object sender, EventArgs e)

應該是:private async void btn_Async_Click(object sender, EventArgs e)給一個嘗試,或呼叫一個異步方法。

+0

確實。這與匹配具有'private async void startButton_Click(對象發件人,RoutedEventArgs e)'作爲第一個方法簽名的鏈接頁面上的示例。 – Chris 2014-09-01 14:24:10

+1

@Chris無需看,它顯然缺少:) – Noctis 2014-09-01 14:25:40

+0

這並不意味着作爲你的答案是正確的支持證據,但作爲OP的亮點,他的代碼與他認爲他的代碼不同。正如你所說的,你的回答很高興,不需要外部參考。 – Chris 2014-09-01 15:04:45