非同期で実行され、完了ハンドラーを介して結果を返すメソッドがあります。メソッド呼び出し自体は「すぐに」戻りますが、完了ハンドラーが呼び出されるまでに時間がかかる場合があります。
前回の呼び出しで完了ハンドラーが処理されていない場合に、このメソッドが 2 回実行されないように、このメソッドの呼び出しをシリアル化したいと考えています。
今、私はフラグを使用しています
-(void)myAsyncMethod:(void(^)(NSError *error))block
{
if(_isRunning)
{
return; // would like to queue the call
}
_isRunning = YES;
// do some long running async work which themselves can have completion handlers and run asynchronously
// look for ever place with a call to "block"
_isRunning = NO;
block(error);
}
dispatch_sync、async などを使用してメソッド呼び出し内でフラグを使用せずにこれを行う方法はありますか?