Может ли кто-нибудь показать мне небольшой фрагмент кода, который демонстрирует, как вызывать метод асинхронно в С #?
источник
Может ли кто-нибудь показать мне небольшой фрагмент кода, который демонстрирует, как вызывать метод асинхронно в С #?
Если вы используете action.BeginInvoke (), вам нужно где-то вызвать EndInvoke - иначе инфраструктура должна сохранить результат асинхронного вызова в куче, что приведет к утечке памяти.
Если вы не хотите переходить на C # 5 с ключевыми словами async / await, вы можете просто использовать библиотеку Task Parallels в .Net 4. Это намного, намного лучше, чем использование BeginInvoke / EndInvoke, и дает чистый способ запуска - и забудьте для асинхронных заданий:
using System.Threading.Tasks;
...
void Foo(){}
...
new Task(Foo).Start();
Если у вас есть методы для вызова, которые принимают параметры, вы можете использовать лямбда, чтобы упростить вызов, не создавая делегатов:
void Foo2(int x, string y)
{
return;
}
...
new Task(() => { Foo2(42, "life, the universe, and everything");}).Start();
Я почти уверен (но, по общему признанию, не уверен), что синтаксис C # 5 async / await - это просто синтаксический сахар вокруг библиотеки задач.
Начиная с .Net 4.5, вы можете использовать Task.Run, чтобы просто запустить действие:
Task.Run против Task.Factory.StartNew
источник
Вот как это сделать:
Конечно, вам нужно заменить
Action
делегатом другого типа, если у метода другая подписьисточник
Прочтите статью MSDN « Асинхронное программирование с помощью Async и Await», если вы можете позволить себе поиграть с новыми вещами. Он был добавлен в .NET 4.5.
Пример фрагмента кода из ссылки (который сам взят из этого проекта образца кода MSDN ):
Цитата:
Подробности по ссылке .
источник
источник