【问题标题】:Async await chaining how to stop异步等待链接如何停止
【发布时间】:2013-02-26 20:49:45
【问题描述】:

(异步/等待的新手)

我正在链接一个 Initialize() 函数,该函数正在深入到许多类。
每个类都有这个初始化方法:

    public async Task Initialize(string fileName)

当我进入最后一堂课时,我应该做什么?
我想运行一个简单的函数,例如:

public async Task Initialize(string dllPath)
{         
    await PrintThePath(dllPath);
}

public void PrintThePath(string dllPath)
{
     Console.WriteLine(dllPath);
}

当然,我收到“无法等待无效”错误。
所以我在逻辑上做错了。

谁能解释一下?

【问题讨论】:

  • 你真的有什么要await吗?听起来你根本不应该使用async
  • 我有,这是开始,稍后这个 init 将实例化一个 WCF 客户端,该客户端将与 WCF 服务进行通信。并且 WCF 服务将至少需要几秒钟来完成操作

标签: c# asynchronous .net-4.5 async-await c#-5.0


【解决方案1】:

在这种情况下,只需直接调用PrintThePath 而不使用await,因为它是一个简单的同步方法。

public async Task Initialize(string dllPath)
{
    PrintThePath(dllPath);
}

虽然看起来没有理由将Initialize 标记为async,但查看此示例。它不做任何async 工作,也不是override 方法。本身不需要将此方法标记为async(编译器会对此发出警告)

编辑

OP 指定它们在构建时将警告视为错误,并且需要保持这种模式,即使 Initialize 实际上并不 await。这是抑制警告的代码

#pragma warning disable 1998
    public async Task Initialize(string dllPath)
    {
        PrintThePath(dllPath);
    }
#pragma warning restore 1998

【讨论】:

  • 问题是我把警告当成错误,无法编译
  • @ilansch:那么你需要抑制警告。
  • 它不是警告,因为项目属性设置为:将所有警告视为错误。所以这是一个冲突:(因为我无法抑制错误。
  • @ilansch 警告仍然可以被抑制,即使启用了warn as error。只需在函数定义之前执行#pragma warning disable 1998 并在之后重新启用它
  • OK 建得很好,谢谢,这个不清楚,你怎么知道它是 1998 年的?
猜你喜欢
  • 2018-08-13
  • 2020-01-05
  • 1970-01-01
  • 2019-07-01
  • 2021-12-22
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多