2012-03-26 10 views
0

年齢のためにgoogelingし、本の非同期タスクに関するいくつかのものを読んだ後。私はそれに非同期タスクを持つ私の最初のプログラムを作った。私はただ一つのタスクを開始することができることを見つけるためにのみ。私は一度その仕事をしたい。これは私がそれがうまくいかないことがわかったところです。少しより明確にするために、ここに私のコードの一部は以下のとおりです。同じ非同期タスク(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クラスは、一度に1つのpingを送信するためにのみ使用できます。一度に複数のpingを送信する場合は、複数のPingインスタンスを使用する必要があります。

私は同じ問題がここにあると考えています:_AdsClientおそらく一度に1つの非同期操作に制限されています。したがって、一度に複数のInitFunctionを実行したい場合は、そのタイプのインスタンスを複数使用する必要があります。

あなたはInitFunction複数回、一度に一つを実行したい場合一方、その後、あなたは自分の呼び出し元のコードにいくつかのawait Sを追加する必要があります。

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

これはおそらく動作します - しない限り、 _AdsClientには「1回限りの使用」セマンティクスがあります。このような制限があるクラスもあります。

+0

おかげさまで、ご返信ありがとうございます。しかし、私はちょうどそれが本当に "一度"の制限の問題であることを知った。 AdsClientでソケットを開こうとしました。これは、2番目のインスタンスが失敗した場所です。これは、現在ソケットが存在していたか、またはfristタスクによってすでに開かれていたためです。あなたのanwserのおかげで、物事は今明らかです! –