我的应用程序中收到很多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#中的异步编程有更深入的了解,并且能够在这个问题上提供一些见解/答案。
答案 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()