Асинхронный вызов, определенный как один поток в процессе, порождающий другой поток для выполнения вызова и прослушивания результата, пока родительский поток продолжает свою работу, не более или менее безопасен, чем тот же вызов, сделанный синхронно.Единственное различие между ними, с точки зрения внешнего наблюдателя процесса, состоит в том, что боковой поток - это тот, который блокируется во время ожидания результатов вызова вместо основного потока.Новый поток получает новый стек и указатель выполнения, но разделяет кучу со всеми другими потоками процесса, и потоки могут обращаться к переменным в стеках других потоков по ссылке.Это та же самая программа, выполняющаяся в том же пространстве памяти, она просто выполняет свой код из двух мест вместо одного.
Кроме того, может оказаться невозможным написать программу на C #, которая не имеет асинхронных операций;Есть много таких операций, встроенных в среду выполнения.Например, сборка мусора и потоки, используемые средой выполнения для связи с различными уровнями ввода-вывода.Программирование пользовательского интерфейса, основанное на событиях, является многопоточным;«основной поток» вашей программы вызывается «потоком пользовательского интерфейса» среды выполнения всякий раз, когда пользователь что-то делает;в противном случае это просто ожидание.