В 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; });
Когда мы должны делать
blockquote>rm -rf *
?Основное использование
Когда что-то происходит неожиданно. Это включает в себя:
- «У меня установлена библиотека FOO , но CMake не может ее найти»,
- «Я изменил файл BAR , но CMake не перестраивает свои зависимости »,
- и т. д.
Другие использования
Технически, удаление каталога сборки обычно помогает в очистке кэша CMake. (Таким образом, тот же эффект может быть достигнут командой
rm CMakeCache.txt
). Это в основном необходимо для повторного поиска таких вещей, как библиотеки или файлы заголовков. Примеры:
- «Я изменил настройки среды, поэтому CMake нужно найти другую библиотеку »
- «Я изменил переменные CMake до
find_package
, поэтому CMake необходимо найти другую библиотеку "