C # 7.0 Автономный сброс путаницы - PullRequest
2 голосов
/ 03 июля 2019

Я хотел бы лучше понять пару примеров, связанных с использованием функции сброса C # 7.0.

Оба они используют так называемое автономное удаление .

Это первый пример, который сбивает меня с толку, который доступен здесь :

public class EmailController
{
    public ActionResult SendEmail(string email)
    {
        var correlationId = HttpContext.Request.Headers["x-correlation-id"].ToString();

        // Starts sending an email, but doesn't wait for it to complete
        _ = SendEmailCore(correlationId);
        return View();
    }

    private async Task SendEmailCore(string correlationId)
    {
        // send the email
    }
}

Является ли автономный сброс, используемый при вызове SendEmailCore, каким-либо образом полезным?В чем разница между кодом выше и тем же кодом без присвоения SendEmailCore(correlationId) выражению отбрасывания _?Есть ли какое-либо различие в поведении во время выполнения?

Вот второй пример кода, который доступен здесь :

using System;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      ExecuteAsyncMethods().Wait();
   }

   private static async Task ExecuteAsyncMethods()
   {    
      Console.WriteLine("About to launch a task...");
      _ = Task.Run(() => { var iterations = 0;  
                           for (int ctr = 0; ctr < int.MaxValue; ctr++)
                              iterations++;
                           Console.WriteLine("Completed looping operation...");
                           throw new InvalidOperationException();
                         });
      await Task.Delay(5000);                        
      Console.WriteLine("Exiting after 5 second delay");
   }
}

Опять же, я не вижуПолезность присвоения выражению отбрасывания _, я попробовал пример в visual studio, но, похоже, поведение во время выполнения одинаково с выражением отбрасывания и без него.Кроме того, в описании примера есть следующее предложение, которое еще больше смущает меня:

В следующем примере используется автономное отбрасывание для игнорирования объекта Task, возвращаемого асинхронной операцией.Это приводит к подавлению исключения, которое выдает операция, когда она собирается завершиться.

Исключение, вызванное при вызове Task.Run, игнорируется средой выполнения в любом случае, в том смысле, чточто программа успешно завершает с или без * выражения отбрасывания.

Это не , связанное с самим выражением сброса, но с тем фактом, что возвращаемая задача отмененаи его исключение не наблюдается.Задача не ожидается, и нет вызова Task.Wait, поэтому CLR игнорирует исключение, и процесс не завершается сбоем;это обычное поведение Task начиная с .NET 4.5.Так какой смысл в цитируемом предложении?

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