我正在建立一个Web,它将通过我们的Intranet为客户提供服务。为了方便开发人员在客户端上工作,我正在考虑让Web坚持与客户端共享的接口,如下所示。
使用共享接口的目的主要是对客户端开发人员在编译时检测到的Web API进行更改。此外,客户端还可以利用将用于与Web通信的HttpClient实例包装器的接口。
客户端开发人员希望在其整个实现过程中使用async和await,我有谁可以说“不”呢?
public interface IValueController
{
Task<string> ReadAsync();
string ReadSync();
}
[Route("api/v1/[controller]")]
public class ValueController : Controller, IValueController
{
[HttpGet("async")]
public Task<string> ReadAsync()
{
return Task.FromResult("async!");
}
[HttpGet("sync")]
public string ReadSync()
{
return "sync!";
}
}我对提供同步和异步方法并不感兴趣--其中之一必须这样做。问题是:将Web操作定义为异步操作有什么不利之处吗?如果不是,我要全身心投入!
-S
发布于 2017-05-02 09:08:22
何时使用异步:
不使用时:同时编写任何快速运行的任务或方法。
注意:注意死锁,因为编译器允许您编写并成功编译异步代码,即使不了解异步代码的基本概念。
发布于 2017-05-02 13:07:29
使用共享接口的目的主要是对客户端开发人员在编译时检测到的Web API进行更改。
如今,自动生成API描述(例如Swagger),然后自动生成客户端(可以是.NET或其他语言)变得更加常见。这种方法不仅允许多个客户端(例如,一个Swagger客户端是API的HTML文档,包含示例和从网站调用它们的能力),而且它还可以为您处理同步/异步转换,而不需要任何类型的“异步签名,但实际上是同步的”代码。
也就是说,如果您想要同步实现异步方法,就没有什么可以阻止它。我唯一能想到的问题是,如果您使用的是完全ASP.NET,那么异步操作就不能是子操作。此限制在ASP.NET核心上不再存在。
https://stackoverflow.com/questions/43732905
复制相似问题