CancellationToken на страницах Blazor?C#

Место общения программистов C#
Ответить
Anonymous
 CancellationToken на страницах Blazor?

Сообщение Anonymous »

Прожив два года под камнем в плане трудоустройства, теперь я столкнулся с 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 MyAsyncApi(CancellationToken cancellationToken)
{
var result = _entities.MyModel.FirstOrDefault(e => e.Id == 1, cancellationToken: cancellationToken);
return OK(result);
}
}
}
CancellationToken будет внедрен asp.net Framework/Core и напрямую связан с текущим контекстным каналом подключения.
Следовательно, если пользователь закрывает соединение, токен становится недействительным.
Я бы предположил, что для ядра asp.net и blazor, где инъекции зависимостей составляют большую часть, это будет иметь место и здесь, но я не смог найти любая документация по этому поводу здесь.
Итак, следует ли на этом этапе по-прежнему использовать токены отмены или Microsoft творит какую-то магию в фоновом режиме для асинхронных задач? И если да, то какая реализация будет лучшей?
РЕДАКТИРОВАТЬ:
Вот моя настройка, чтобы уточнить:
Компонент Blazor:

Код: Выделить всё

@page "/Index"
@inject IIndexService Service

@* Some fancy UI stuff *@

@code {
private IEnumerable _uiValues;

protected override async Task OnInitializedAsync()
{
_uiValues = await Service.FetchCostlyValues();
}
}
И внедренный сервисный класс, который выполняет тяжелую работу:

Код: Выделить всё

public interface IIndexService
{
Task FetchCostlyValues();
}

public class IndexService : IIndexService
{
public async Task FetchCostlyValues()
{
var uiValues = await heavyTask.ToListAsync(); // 

Подробнее здесь: [url]https://stackoverflow.com/questions/62499939/cancellationtoken-in-blazor-pages[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»