вызвать функцию и никогда не ждать ее в C #


26

В моем веб-приложении mvc4 есть контроллер, в котором есть действие, которое требует вызова другой функции. Что происходит в этой функции, т.е. возвращаемое значение не имеет значения для моего действия. Как я могу вызвать эту функцию и никогда не ждать ее выполнения?

Я думаю, что это может быть сделано с помощью асинхронного, но моя цель не в том, чтобы использовать ресурсы, просто вызвать функцию и никогда не ждать, когда это произойдет.

Пожалуйста, дайте мне совет.



Единственный способ сделать это - передать его другому потоку. Нет такой вещи, как вызов функции без ресурсов, если только вы не хотите, чтобы она была неактивной.
Роберт Харви

спасибо, я имел в виду, что это лучший и оптимизированный способ, я думаю, что лучший способ - это Task.Run и использование WebApi в MVC на основе упомянутой ссылки @ user814064, возможно, я могу просто использовать решение javascript, но я думаю, что это не так профессионал!
user2675751

Ответы:


40
private void Demo()
{
    // Do something, given that the result doesn't matter.
}

public void Do()
{
    Task.Factory.StartNew(this.Demo);

    // The following line will be executed without waiting for the result.
    DoSomethingElse();
}

Обратите внимание, что запускать метод, не заботясь о результате или об исключениях, которые он может выдать, рискованно.

Если в a выдается исключение Task, оно будет скрыто до тех пор, пока вы:

  1. Соблюдайте результат,
  2. Wait() для задачи или:
  3. GC вызывает финализатор на Task.

Вы можете обрабатывать себя 1. и 2. вскоре после вызова метода или можете добавить продолжение, myTask.OnComplete(myErrorHandler, TaskContinuationOptions.OnlyOnFaulted)которое будет запускаться, когда исходная задача выдает исключение. 3. вылетит ваш процесс; не делай этого


3
Не могли бы вы подробнее остановиться на «3. Сбой вашего процесса; не делайте этого». Разве это не делается автоматически?
rdans
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.