在工作方面经历了两年的埋头苦干后,我现在在新的工作场所遇到了 Blazor,在这两年之前主要从事 ASP.NET Framework MVC 工作之后,我还有很多工作要做。
在 Blazor 服务器端尝试自己,我尝试应用我过去的知识,其中包括用于异步操作的取消令牌,但我找不到有关它们与 Blazor 结合的太多信息。
它们仍然是最佳实践还是在某个时候已经过时了?我确实发现了这个先前提出的问题,建议在该OnInitializedAsync()方法上创建一个令牌源并取消它,Dispose()老实说我觉得有点粗糙。(我需要为每个页面实现这个,你知道......干)
我还在Microsoft Docs 上找到了这篇关于高级方案的文章,其中解释了如何实现电路处理程序,老实说,这有点超出了我的能力范围,而且很可能超出了我的小型家庭项目的范围。
相比之下,在 asp.net Framework MVC 中我会构建一个像这样的控制器:
namespace SampleWebsite.Controllers
{
public class SampleController : ApiController
{
private readonly MyEntities _entities = new MyEntities();
public async Task<IHttpActionResult> MyAsyncApi(CancellationToken cancellationToken)
{
var result = _entities.MyModel.FirstOrDefault(e => e.Id == 1, cancellationToken: cancellationToken);
return OK(result);
}
}
}
Run Code Online (Sandbox Code Playgroud)
CancellationToken 将由 asp.net Framework / Core 注入,并直接链接到当前上下文连接管道。因此,如果用户关闭连接,令牌就会失效。
我本以为对于依赖注入占很大一部分的 asp.net core 和 blazor 来说,这里也是这种情况,但我在这里找不到任何关于此的文档。
那么,此时是否仍应使用取消令牌,或者微软是否在后台为异步任务做了一些魔法?如果是,最好的实施是什么?
编辑: …
我很难决定哪种方式最适合在我的 WebAPI 2 后端查询我的 SQL Server
我试图尽可能多地使用 async/await,但我发现当我返回整个集合时,没有可用的 async 选项。
哪种方式最好?
[ResponseType(typeof(List<ExposedPublisher>))]
[HttpGet]
public async Task<IHttpActionResult> GetPublisher()
{
var list = new List<PublisherWithMedia>();
foreach (var publisher in _db.Publisher.Where(e => e.IsDeleted == false))
{
var pub = new PublisherWithMedia()
{
Id = publisher.Id,
Name = publisher.Name,
Mediae = new List<WebClient.Models.Media>()
};
foreach (var media in publisher.Media)
{
pub.Mediae.Add(ApiUtils.GetMedia(media));
}
list.Add(pub);
}
return Ok(list);
}
Run Code Online (Sandbox Code Playgroud)
或者
[ResponseType(typeof(List<PublisherWithMedia>))]
[HttpGet]
public async Task<IHttpActionResult> GetPublisher()
{
var list = new List<PublisherWithMedia>();
var entity = await …Run Code Online (Sandbox Code Playgroud)