Проблема с асинхронным методом С# с «огонь и забудь»C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с асинхронным методом С# с «огонь и забудь»

Сообщение Anonymous »

Асинхронный метод Like должен запускать и забывать действие, подобное пользователю. Но с тех пор мне интересно, как лучше всего справиться с асинхронным пожаром и забыть.
Вариант 1:

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

public async Task Like(LikeDto dto)
{
var _ = svc.ExecuteDb(async (context) =>
{
var (rating, liked) = await likeAndSave(context, dto.Liked);
await sendEvents(dto.Id, liked);
});

await Task.CompletedTask;
}
Вариант 2:

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

public async Task Like(LikeDto dto)
{
var _ = svc.ExecuteDb(async (context) =>
{
var (rating, liked) = await likeAndSave(context, dto.Liked);
await sendEvents(dto.Id, liked);
});

await Task.FromResult(_);
}
Вариант 3:

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

public async Task Like(LikeDto dto)
{
await Task.Run(() =>
{
var _ = svc.ExecuteDb(async (context) =>
{
var (rating, liked) = await likeAndSave(context, dto.Liked);
await sendEvents(dto.Id, liked);
});
});
}
Класс svc для помощи в ситуациях, когда задача не ожидает выполнения, а также контекст http-req для времени жизни внедренных служб будут недоступны.

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

public class SercicesProvider where T : DbContext
{
private readonly IServiceProvider _services;

public SercicesProvider(IServiceProvider svc)
{
_services = svc;
}

public async Task ExecuteDb(Func action)
{
using (var scope = _services.CreateScope())
{
var service = scope.ServiceProvider.GetRequiredService();
await action(service);
}
}
}
Все подходы работают, но ждут Task.CompletedTask; кажется, с этим лучше всего справиться.

Подробнее здесь: https://stackoverflow.com/questions/791 ... and-forget
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • В чем разница между методом await(), методом await().ConfigureAwait(true) и методом await().ConfigureAwait(false) в C#?
    Anonymous » » в форуме C#
    0 Ответы
    69 Просмотры
    Последнее сообщение Anonymous
  • В чем разница между методом await(), методом await().ConfigureAwait(true) и методом await().ConfigureAwait(false) в C#?
    Anonymous » » в форуме C#
    0 Ответы
    72 Просмотры
    Последнее сообщение Anonymous
  • В чем разница между методом await(), методом await().ConfigureAwait(true) и методом await().ConfigureAwait(false) в C#?
    Anonymous » » в форуме C#
    0 Ответы
    77 Просмотры
    Последнее сообщение Anonymous
  • Активность «выстрели и забудь» во временном
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Проблема с огнем и забудь звонки
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous

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