等待第二级任务<;IEnumerable<;某事>>;在C#中

本文关键字:gt lt IEnumerable 某事 等待 任务 二级 | 更新日期: 2023-09-27 18:29:58

我遇到了一个特殊的问题。基本上,我正在为一个从服务器读取数据的现有异步类编写一个包装器。库中的原始方法类似于

public async Task<IEnumerable<PersonData>> GetPersonData();

它与配合得很好

var people = await GetPersonData();

然而,当我试图包装它时,我遇到了一个问题。为了简单起见,我已经包含了我试图测试它的初始版本,但该版本不起作用。此外,我的实际包装方法给出了一个特殊的"无法等待"错误,该错误并没有说明无法完成的实际原因。这是一个编译器错误,所以我一定做错了什么。

public async Task<IEnumerable<PersonData>> GetWrappedPersonData()
{
    return await clientClass.GetPersonData();
}

然后当我在我的主类中调用这个时

var wrappedPeople = await wrapper.GetWrappedPersonData();

我收到一个"等待"的错误,指出"无法等待"System.Threading.Tasks.Task<System.Collections.Generic.IEnumerable<PersonData>>'

当我将鼠标悬停在GetWrappedPersonData上时,它表示该方法是不可用的。我很困惑为什么我不能在这里等着。

等待第二级任务<;IEnumerable<;某事>>;在C#中

我发现了问题的根源,事实上,这整件事由多个不同的项目组成。它的通信模块包含多个不同的库,以分离服务提供商。返回的"PersonData"位于其中一个程序集中,未从主应用程序项目中引用。我收到的错误并没有真正反映出这是根本原因。

因此,基本上,我收到的错误几乎没有提示解决方案的实际问题。希望这能帮助其他人收到同样的错误。:P

看起来像是编译器消息错误。

但解决方案是,您不应该在包装中使用await:)

如果你await,你就打开了任务,并且你不能await一个已经等待的任务:)

您的调用方法需要async。如果该方法是Main,那么请参阅此答案。https://stackoverflow.com/a/9212343/171121