我遇到了一个奇怪的问题。基本上我正在为从服务器读取数据的现有异步类编写包装器。库中的原始方法是这样的
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上时,它表示该方法是可以接受的。我很困惑为什么我不能在这里等待。
答案 0 :(得分:1)
我找到了问题的根源,但事实是整个事情由多个不同的项目组成。它的通信模块包含多个不同的库以分离服务提供者。返回的“PersonData”驻留在其中一个程序集中,并未从主应用程序项目中引用。我收到的错误并没有真正反映出这是根本原因。
所以基本上我收到的错误几乎没有提示解决方案实际上有什么问题。希望这有助于其他人收到相同的错误。 :P
答案 1 :(得分:0)
虽然看起来像编译器消息错误。
但解决方案是你不应该在你的包装器中await
:)
如果你await
你打开任务,你不能await
已经等待的任务:)
答案 2 :(得分:0)
您的调用方法需要async
。如果该方法为Main
,请参阅此答案。 https://stackoverflow.com/a/9212343/171121