この上の私のブログの記事のカップルを見てみましょう: -
Simple Asynchronous Operation Runner – Part 1
Simple Asynchronous Operation Runner – Part 2
を、彼らは実際の実装に焦点を当てるための記事が深さに少しある、という考えではありませんこれを実現するには派手なフレームワークを含める必要があります。必要な唯一のコードは実際には記事にあり、ダウンロードする追加のdllやzipファイルはありません。
ただし、同期コーディングが可能だった場合のコードのイメージを想像するアプローチ2に注意してください。あなたのケースでは、あなたのコードは次のようになります -
void StuffToDo()
{
doFirstGet(someParams);
doSecondGet(someParams);
doThirdGet(...);
}
次のステップではなくAsyncOperation
を返すために、「やる」メソッドの内容を変更しています。
IEnumerable<AsyncOperation> StuffToDo()
{
yield return doFirstGet(someParams);
// Do some other synchronous stuff here, this code won't run until doFirstGet has completed.
yield return doSecondGet(someParams);
// Do some other synchronous stuff here, this code won't run until doSecondGethas completed.
yield return doThirdGet(...);
// Do some final synchronous stuff here, this code won't run until doThirdGethas completed.
}
- :第三段階は、このようなあなたの想像上の同期コードを変更している
AsyncOperation doFirst(someParams)
{
return (completed) =>
{
SomeAsyncObj thing = new SomeAsyncObj();
thing.OnCompleted += (s, args) =>
{
try
{
completed(null);
}
catch (Exception err)
{
completed(err);
}
};
thing.DoSomethingAsync(source);
};
}
- :あなたはそれを変換します
void doFirst(someParams, Action callback)
{
SomeAsyncObj thing = new SomeAsyncObj();
thing.OnCompleted += (s, args) { callback() };
thing.DoSomethingAsync();
}
- :現在、彼らはおそらくこのような何かを見て最後にStuffToDo
への呼び出しは次のように変更されます。 -
StuffToDo().Run((err) =>
{
// report any error in err sensibly
});