【问题标题】:Is asynchronous programming like a zombie virus?异步编程像僵尸病毒吗?
【发布时间】:2020-05-07 11:05:57
【问题描述】:

我正在 C# 中尝试异步编程,主要是尝试将 API 调用发送到我创建的 API,但据我了解,只能从另一个 async 方法调用 async 方法。但是,我的 Main 方法不能是异步的。我不想使用.Result 属性同步调用该方法,因为这会破坏异步编程的意义。我必须从另一个线程调用该方法还是有其他解决方案?

【问题讨论】:

  • 它是什么类型的项目,什么框架和版本?
  • “我的 Main 方法不能是异步的” - 在语言级别 7.1+ 中可以。
  • @Rup 是的,除非他因自己的原因无法使其异步
  • Main 可以标记为异步,但这只是在幕后正确实现 GetAwaiter().GetResult() 所以它仍然阻塞。这就是它的方式,它很好。控制台应用程序中没有同步上下文。
  • 您不需要在 Winforms 应用程序中从 Main 运行任何异步代码。

标签: c# asynchronous async-await


【解决方案1】:

Main 现在可以是异步的:

public static async Task Main(string[] args) 
{
   //TODO: do something more interesting
   await Task.Delay(100);
}

但即使不可能,您也可以利用异步编程,只需一点样板代码:

public static void Main(string[] args)
{
   MainAsync(args).GetAwaiter().GetResult();
}

private static async Task MainAsync(string[] args) 
{
  // TODO: do something more interesting.
  await Task.Delay(100);
}

请阅读this article了解更多信息

【讨论】:

    猜你喜欢
    • 2021-01-17
    • 2013-09-24
    • 2011-03-14
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多