同一异步任务的多个实例(Windows Phone)

时间:2012-03-26 11:26:29

标签: c# multithreading asynchronous windows-phone-7.1 task

经过多年的googeling,并阅读一些关于书中异步任务的东西。我制作了第一个带有异步任务的程序。只是发现,我只能开始一项任务。我想再运行一次任务。这是我发现这似乎不起作用的地方。为了更清楚一点,以下是我的代码的一些部分:

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。

如果有人可以帮助我,那就太棒了!

〜巴特

1 个答案:

答案 0 :(得分:2)

async / await可以同时完成多项任务和多项任务。但是,有时不同的对象可以限制一次可以有多少异步操作。

例如,Ping类只能用于一次发送一个ping。如果要一次发送多个ping,则需要使用多个Ping个实例。

我怀疑同样的问题在这里发挥作用:_AdsClient可能一次仅限于一个异步操作。因此,如果您希望一次运行多个InitFunction,则必须使用任何类型的多个实例。

另一方面,如果您想多次运行InitFunction,一次一个,那么您只需要在调用代码中添加一些await

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

这可能会有效 - 除非_AdsClient具有“一次性使用”语义。有些班级确实有此限制。