Я написал простое консольное приложение для проверки ConfigureAwait (false) для решения проблемы вызова асинхронной функции c синхронизированным способом. Вот как я имитирую событие и пытаюсь вызвать асин c -функцию syn c.
public static class Test2
{
private static EventHandler<int> _somethingEvent;
public static void Run()
{
_somethingEvent += OnSomething;
_somethingEvent(null, 10);
Console.WriteLine("fetch some other resources");
Console.ReadLine();
}
private static void OnSomething(object sender, int e)
{
Console.WriteLine($"passed value : {e}");
FakeAsync().Wait();
}
private static async Task FakeAsync()
{
await Task.Delay(2000).ConfigureAwait(false);
Console.WriteLine($"task completed");
}
}
вывод кода выглядит следующим образом:
passed value : 10
task completed
fetch some other resources
И когда я меняю функцию OnSomething на asyn c void, как это:
private static async void OnSomething(object sender, int e)
{
Console.WriteLine($"passed value : {e}");
await FakeAsync();
}
Вывод изменится на следующее:
passed value : 10
fetch some other resources
task completed
Вы можете увидеть получить некоторые другие ресурсы происходит до того, как задача выполнена раздел и это мой желаемый результат.
Мой вопрос заключается в том, как я могу добиться того же результата, вызвав функцию asyn c, синхронизированную как первая подпись, которую я написал для функции OnSomething ?
Как можно Я использую ConfigureAwait (false) , чтобы помочь мне в этой ситуации? Или, может быть, я не правильно его использую.