等待第二级任务<ienumerable <something>&gt;在C#中</ienumerable <something>

时间:2013-09-02 14:12:26

标签: c# asynchronous enumerable async-await

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

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();

我收到“await”的错误,指出“无法等待'System.Threading.Tasks.Task&lt; System.Collections.Generic.IEnumerable&lt; PersonData&gt;&gt;'

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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

如果你await你打开任务,你不能await已经等待的任务:)

答案 2 :(得分:0)

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