Вернуть метод Main к void, но сохранить работоспособность кода
Есть такой код:
class Program
{
static async Task Main()
{
await DownloadAsync();
}
static async Task DownloadAsync()
{
var options = new ProgressBarOptions
{
ProgressCharacter = '─',
ProgressBarOnBottom = true
};
const int totalTicks = 100;
using (WebClient wc = new WebClient())
{
var pbar = new ProgressBar(totalTicks, "Initial message", options);
wc.DownloadProgressChanged += (s, e) => { pbar.Tick(e.ProgressPercentage,"Download XML Plugin..."); };
await wc.DownloadFileTaskAsync(new Uri("http://dev.osel.pp.ua/Consulo/Plugins/com.intellij.xml_2961.zip"),"/home/ketronix/xml.tar.gz");
};
}
}
И лично мне кажется, что то, что метод Main имеет тип Task, не есть хорошо. Как сделать так, чтобы он был void и, при этом, при вызове метода загрузки файле, в отдельном потоке рисовался прогресс бар и синхронизировался с прогрессом загрузки? По сути нужно просто как-то сделать вместо Task - void, и при этом сохранить работоспособность.
Всем спасибо.
Ответы (1 шт):
Автор решения: iiKuzmychov
→ Ссылка
Асинхронный Main это как раз синтаксический сахар, который призван сократить рутину и упростить код. В вашем случае нет никакого смысла в том, чтобы "вернуть void".
Конструкция
static async Task Main() { ... }
превращается компилятором в
private static void $GeneratedMain() =>
Main().GetAwaiter().GetResult();