У меня есть простой код, где я пытаюсь лучше понять, как метод можно вызывать асинхронно на C#.Асинхронный вызов синхронного метода
У меня есть функция под названием Function1, которую я хочу запустить асинхронно
static void Function1(out int threadId)
{
Console.WriteLine("I'm inside Function 1. Going to sleep for 7 seconds...");
Thread.Sleep(7000);
Console.WriteLine("I'm awake now");
threadId = Thread.CurrentThread.ManagedThreadId;
}
Тогда у меня есть вторая функция Function2, которую я хочу работать в нормальном режиме (синхронно)
static void Function2()
{
Thread.Sleep(3000);
Console.WriteLine("I'm inside Function 2");
}
Я также создан делегат с той же подписью метода, что и Function1
delegate void AsyncMethodCaller(out int threadId);
А вот мой основной метод вызова:
static void Main(string[] args)
{
int threadId;
AsyncMethodCaller caller = new AsyncMethodCaller(Function1);
caller.BeginInvoke(out threadId, null, null);
Function2();
}
В моей основной метод, я ожидаю Function1 для запуска асинхронно; а затем без ожидания на нем, чтобы закончить, Function2 выполняет. Поэтому я ожидаю, что следующий вывод:
Я внутри асинхронной функции 1. Иду спать в течение 7 секунд ...
я внутри функции 2
Я проснулся
Вместо этого я просто получить следующий вывод:
Я внутри асинхронной функции 1. спать в течение 7 секунд ...
я внутри функции 2
Почему мое ожидание отличается от реальности? почему линия «Я просыпаюсь сейчас» никогда не достигала?
Спасибо
Поскольку вы не дождались завершения функции 1 до выхода из Главного – MickyD
, согласитесь с @MickyD. –
Мне нужно создать делегат каждый раз, когда я хочу вызвать метод асинхронно? – IsaacBok