Как уже отмечали другие, это полностью синхронно.Если вы хотите выполнить это асинхронно, вам придется написать это по-другому.
Кроме того, если на событие 'onA' не подписано, onA () вызовет исключение нулевой ссылки.
Обычным шаблоном является определение события «Foo» и метода «OnFoo», который вызывается при возникновении события.Из названия события я подозреваю, что это то, что вы хотите - например: -
class Foo // Class and member names must be distinct
{
public delegate void ADelegate();
public event ADelegate A;
private void OnA()
{
if(A != null)
A();
}
public void Func()
{
// Some code...
OnA();
// More code...
}
}
Если вы хотите вызывать подписанные обработчики событий асинхронно, вы можете использовать BeginInvoke () и EndInvoke () таким образом: -
class Foo // Class and member names must be distinct
{
public delegate void ADelegate();
public event ADelegate A;
private void OnA()
{
if (A == null) return;
// There may be multiple subscribers, invoke each separately.
foreach(ADelegate del in A.GetInvocationList())
del.BeginInvoke(SubscriberCallback, del);
}
private void SubscriberCallback(IAsyncResult result)
{
var del = (ADelegate) result.AsyncState;
del.EndInvoke(result);
// Do something in the callback...
}
public void Func()
{
// Some code...
OnA();
// More code...
}
}
Обратите внимание, что этот код не будет ждать окончания выполнения подписчика (ей) события, вам нужно будет пропустить асинхронный результат через вызов события, чтобы убедиться в этом.
Обратите внимание, что callback - это метод, который вы указываете в асинхронном BeginInvoke (так как он вызывается обратно после выполнения асинхронной работы) и не возвращается к Func (), поскольку выполняется вотдельная тема.