Это огонь и забыть? (Linq to SQL) - PullRequest
0 голосов
/ 10 октября 2019

У меня есть XXXWriter. Это правильный подход Fire and Forget в C #?

public void Add(XXX model)
    {
        Task.Run(() => // Fire and forget?
        {
            using (var ctx = new FormsEntities())
            {
                var dbXXX = new DALXXX();
                dbXXX.Foo = model.Foo;

                try
                {
                    ctx.DALXXX.Add(dbXXX);
                    ctx.SaveChanges();
                }
                catch (Exception ex)
                {
                    Log.Log.LogError(ex.GetMostInnerException(), "whatever");
                }
            }
        });
    }

1 Ответ

1 голос
/ 10 октября 2019

Я бы рекомендовал рефакторинг реализации, как показано ниже

public class XXXWriter
{
    public static void FireAndForget(XXX model)
    {
       Task.Run(() => DoFireAndForgetAsync(model));
    }

    private void DoFireAndForgetAsync(XXX model)
    {
        try
        {
            using (var ctx = new FormsEntities())
            {
                var dbXXX = new DALXXX();
                dbXXX.Foo = model.Foo;            

                ctx.DALXXX.Add(dbXXX);
                ctx.SaveChanges();

            }
        }catch (Exception ex)
         {

            // Remember that the Async code needs to handle its own
            // exceptions, as the "DoFireAndForget" method will never fail
               Log.Log.LogError(ex.GetMostInnerException(), "whatever");

         }
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...