2012-03-26 50 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