小编Kyt*_*yte的帖子

Blazor 页面中的 CancellationToken?

在工作方面经历了两年的埋头苦干后,我现在在新的工作场所遇到了 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 来说,这里也是这种情况,但我在这里找不到任何关于此的文档。

那么,此时是否仍应使用取消令牌,或者微软是否在后台为异步任务做了一些魔法?如果是,最好的实施是什么?

编辑: …

c# asp.net async-await .net-core blazor

11
推荐指数
2
解决办法
9739
查看次数

entity.ToListAsync().Where 或 entity.Where()?

我很难决定哪种方式最适合在我的 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)

c# async-await asp.net-web-api entity-framework-6

1
推荐指数
1
解决办法
2388
查看次数