У меня есть следующий код, который показывает отправку электронной почты. Я могу достичь этого через ThreadPool, Task и Async. Вызывающий (в данном случае Основной) не интересуется тем, что возвращается.ThreadPool Vs Task Vs Async
Как я понимаю, все три метода создают дополнительный поток, так что конечный результат тот же.
Пожалуйста, поделитесь, если вы найдете какую-либо другую разницу или что должно быть правильным способом в .NET 4.5?
PS. Если вы хотите скопировать код и запустить его, убедитесь, что вы выбрали объект запуска в настройках проекта. Вы можете выбрать один из основных методов запуска.
using System;
using System.Threading;
using System.Threading.Tasks;
namespace AsyncTest
{
class ThreadPoolProgram
{
static void Main(string[] args)
{
// Dont care what SendEmail returns
ThreadPool.QueueUserWorkItem(new WaitCallback(SendEmail));
}
static void SendEmail(Object stateInfo)
{
// Create a SMTP client, send an email and wait for the SMTP client to return!
// Takes 2 seconds
}
}
class TaskProgram
{
static void Main(string[] args)
{
// Dont care what SendEmail returns
Task.Run(() => SendEmail());
}
static void SendEmail()
{
// Create a SMTP client, send an email and wait for the SMTP client to return!
// Takes 2 seconds
}
}
class AsyncProgram
{
static void Main(string[] args)
{
// Don't await for an answer from the SendMail
// var r = await SendEmail();
SendEmail(); // Call without await
}
static Task<bool> SendEmail()
{
// Create a SMTP client, send an email and wait for the SMTP client to return!
// Takes 2 seconds
return Task.FromResult(true);
}
}
}
Плохой пример. Ответ здесь «ни один из вышеперечисленных, использовать SendMailAsync» –
Предполагаю, вы предлагаете использовать SendMailAsync, который входит в состав некоторой библиотеки .NET. Но в этом случае у меня нет библиотеки, но есть некоторый синхронный код в методе SendEmail, который занимает 2 секунды. Вы также можете предположить, что SendEmail происходит из некоторого устаревшего кода, который не возвращает задачу (без async). Мой вопрос касается потока, задачи и асинхронного использования в .NET 4.5. –
_ «Мой вопрос вокруг темы, задачи и асинхронности» _, но также и о Program.Main()? Контекст имеет большое значение. –