2012-03-26 46 views
0

經過長時間的努力,閱讀了一些關於書籍中異步任務的東西。我做了第一個包含異步任務的程序。只有弄清楚,我只能開始一項任務。我想多運行一次任務。這是我發現那似乎不工作的地方。是一點點清晰,這裏是我的代碼的某些部分:同一異​​步任務的多個實例(Windows Phone)

InitFunction(var); 

這是任務本身

public async Task InitFunction(string var) 
    { 

      _VarHandle = await _AdsClient.GetSymhandleByNameAsync(var); 

      _Data = await _AdsClient.ReadAsync<T>(_VarHandle); 

      _AdsClient.AddNotificationAsync<T>(_VarHandle, AdsTransmissionMode.OnChange, 1000, this); 

    } 

這就像一個魅力當我執行任務的只有一次。但爲有可能多次運行它。像這樣?

InitFunction(var1); 
InitFunction(var2); 
InitFunction(var3); 

,因爲如果我這樣做,現在(多任務一次),它要啓動任務仍在運行,並且它拋出一個exeption。

如果有人可以幫助我,這將是太棒了!

〜巴特

回答

2

async/await可以完美地與多任務和多任務同時工作。但是,有時不同的對象可以限制同時有多少次異步操作可以處於未完成狀態。

例如,Ping類只能用於一次發送一個ping。如果您想一次發送多個ping,則需要使用多個Ping實例。

我懷疑同樣的問題在這裏玩:_AdsClient可能一次只限於一個異步操作。所以,如果你想同時運行多個InitFunction,你將不得不使用任何類型的多個實例。

在另一方面,如果你想運行InitFunction多次,每次一個,那麼你只需要一些await s添加到您的調用代碼:

await InitFunction(var1); 
await InitFunction(var2); 
await InitFunction(var3); 

這也許可以工作的 - 除非_AdsClient有「一次性使用」的語義。有些課程確實有這個限制。

+0

奧克,謝謝你的回覆。但我發現這確實是一個「一次」限制的問題。 在AdsClient中,我試圖打開一個套接字。這是第二個實例失敗的地方,因爲套接字當前正在或正被第一個任務打開。謝謝你的支持者,現在事情很清楚! – 2012-03-26 13:55:47