0

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

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 上时,它表示该方法是可等待的。我很困惑为什么我不能在这里等待。

4

3 回答 3

1

我找到了问题的根源,这是整个事情由多个不同的项目组成的事实。它的通信模块包含多个不同的库来分隔服务提供者。返回的“PersonData”驻留在这些程序集之一中,并且未从主应用程序项目中引用。我收到的错误并没有真正反映出这是根本原因。

所以基本上我收到的错误几乎没有暗示解决方案的实际问题。希望这可以帮助那里的其他人收到相同的错误。:P

于 2013-09-02T14:26:58.250 回答
0

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

但解决方案是你不应该await在你的包装中:)

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

于 2013-09-02T14:15:37.980 回答
0

你需要async你的调用方法。如果那个方法是Main,那么看看这个答案。 https://stackoverflow.com/a/9212343/171121

于 2013-09-02T14:22:33.420 回答