Недавно я заметил следующий шаблон, но я не полностью понимаю использование свойства CompletedSynchronously:
IAsyncResult channelOpenResult = channel.BeginOpen(new AsyncCallback(OnOpenCompleteChannel), channel);
if (channelOpenResult.CompletedSynchronously)
{
CompleteOpenChannel(channelOpenResult);
}
И снова в обратном вызове:
void OnOpenCompleteChannel(IAsyncResult result)
{
if (result.CompletedSynchronously)
return;
else
CompleteOpenChannel(result);
}
А где-то в коде есть, конечно, функция:
void CompleteOpenChannel(IAsyncResult result) ...
Является ли это способом обработки асинхронного вызова по-разному в зависимости от того, выполняется ли он напрямую или нет? Но зачем использовать его в этом случае, поскольку AsyncCallback всегда будет вызван (будет?)? Может ли кто-нибудь привести пример, когда вызов выполняется синхронно?