cmake rm -rf построить лучшую практику

В MSDN документация для Task.Run Method (Action) приведена в этом примере, где показано, как асинхронно запускать метод из main:

using System;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
    public static void Main()
    {
        ShowThreadInfo("Application");

        var t = Task.Run(() => ShowThreadInfo("Task") );
        t.Wait();
    }

    static void ShowThreadInfo(String s)
    {
        Console.WriteLine("{0} Thread ID: {1}",
                          s, Thread.CurrentThread.ManagedThreadId);
    }
}
// The example displays the following output:
//       Application thread ID: 1
//       Task thread ID: 3

Примечание. это утверждение, которое следует примеру:

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

Итак, если вместо этого вы хотите, чтобы задача выполнялась в основном потоке приложения, см. ответ на @StephenCleary .

И в отношении потока, на котором выполняется задача, также обратите внимание на комментарий Стивена :

Вы можете использовать простые Wait или Result, и нет ничего плохого в том, что. Но имейте в виду, что существуют два важных отличия: 1) все продолжения async выполняются в пуле потоков, а не в основном потоке, и 2) любые исключения завернуты в AggregateException.

(см. Обработка исключений (параллельная библиотека задач) для того, как включить обработку исключений для работы с AggregateException.)


Наконец, в MSDN из документации для метода Task.Delay (TimeSpan) в этом примере показано, как запустить асинхронную задачу, которая возвращает значение:

using System;
using System.Threading.Tasks;

public class Example
{
    public static void Main()
    {
        var t = Task.Run(async delegate
                {
                    await Task.Delay(TimeSpan.FromSeconds(1.5));
                    return 42;
                });
        t.Wait();
        Console.WriteLine("Task t Status: {0}, Result: {1}",
                          t.Status, t.Result);
    }
}
// The example displays the following output:
//        Task t Status: RanToCompletion, Result: 42

Обратите внимание, что вместо передачи delegate в Task.Run, вы можете вместо этого передать лямбда-функцию следующим образом:

var t = Task.Run(async () =>
        {
            await Task.Delay(TimeSpan.FromSeconds(1.5));
            return 42;
        });

1
задан Jayhello 13 July 2018 в 09:45
поделиться

1 ответ

Когда мы должны делать rm -rf *?

Основное использование

Когда что-то происходит неожиданно. Это включает в себя:

  • «У меня установлена ​​библиотека FOO , но CMake не может ее найти»,
  • «Я изменил файл BAR , но CMake не перестраивает свои зависимости »,
  • и т. д.

Другие использования

Технически, удаление каталога сборки обычно помогает в очистке кэша CMake. (Таким образом, тот же эффект может быть достигнут командой rm CMakeCache.txt). Это в основном необходимо для повторного поиска таких вещей, как библиотеки или файлы заголовков. Примеры:

  • «Я изменил настройки среды, поэтому CMake нужно найти другую библиотеку »
  • «Я изменил переменные CMake до find_package, поэтому CMake необходимо найти другую библиотеку "
2
ответ дан Tsyvarev 17 August 2018 в 13:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: