如何正确解决警告CS1998:此异步方法缺少“等待”(不加抑制)?

时间:2019-07-11 14:06:26

标签: c# visual-studio asynchronous xamarin.forms async-await

我的应用程序中收到很多CS1998警告,我正在寻找如何解决这种情况的方法。

例如,我有一个IDataService接口,该接口具有方法签名Task<DataModel> GetData()

然后我可以说一个RealDataService : IDataService的实现,它执行一些文件的写入/读取操作,并且由于它使用异步I / O方法,因此它们用await进行调用,并且方法签名更改为{ {1}}。

然后使用async Task<DataModel> GetData()从UI中调用此方法。到目前为止,一切都很好。

但是随后我需要测试我的数据,并创建数据接口var data = await _dataService.GetData();的另一种实现,其中数据仅经过硬编码,并且不执行异步操作。一切仍然可以正常进行,但是在构建应用程序时,那些讨厌的CS1998警告开始出现。

可以在网上找到很多解决此问题的方法:

  • 禁用此类警告
  • 使用MockupDataService : IDataService的呼叫
  • 使用任务。从结果-> await Task.Yeild();
  • 我想我已经看了更多,但现在已经不记得了。

但是,没有一种解决方案比其他解决方案感觉“更正确”,所以我想知道解决此问题的正确方法是什么?我知道很多人都对C#中的异步编程有更深入的了解,并且能够在这个问题上提供一些见解/答案。

2 个答案:

答案 0 :(得分:3)

从方法中删除return Task.FromResult(...)关键字。然后使用SQL> ALTER TABLE PRESCRIPTION_IMAGES MODIFY RX_IMAGE3 NULL; Table altered.

答案 1 :(得分:3)

如果没有async,请删除async关键字。 await不会使方法异步。它不是方法签名的一部分。只是语法糖,它允许使用Task.FromResult等待已经执行的异步操作而不会阻塞。

在您的测试方法中,使用public Task<DataModel> GetData() { var model=new DataModel(); //Add some test data return Task.FromResult(model); } 创建一个已完成的任务,并按原样返回:

class Model(models.Model):
    name = models.CharFiled(max_length=50)

class AnotherModel(models.Model):
    model = models.ForeignKey(Model, on_delete=models.CASCADE)
    description = models.TextField()