В чем разница между задачей и потоком?

Одно из более тонких различий между ними заключается в том, что ключевое слово «as» нельзя использовать для приведения, когда задействован оператор приведения:

public class Foo
{
    public string Value;

    public static explicit operator string(Foo f)
    {
        return f.Value;
    }

}

public class Example
{
    public void Convert()
    {
        var f = new Foo();
        f.Value = "abc";

        string cast = (string)f;
        string tryCast = f as string;
    }
}

Это не скомпилируется (хотя я думаю, что в предыдущих версиях) в последней строке, так как ключевые слова "as" не учитывают операторы приведения. Линия string cast = (string)f; работает просто отлично.

366
задан hippietrail 29 August 2019 в 00:36
поделиться

1 ответ

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

Обычно Задача - все, в чем Вы нуждаетесь, я не могу помнить, использовал ли я когда-либо поток для чего-то еще, чем экспериментирование.

можно выполнить то же с потоком, как Вы можете с задачей.

Поток

int result = 0;
Thread thread = new System.Threading.Thread(() => { 
    result = 1; 
});
thread.Start();
thread.Join();
Console.WriteLine(result); //is 1

Задача

int result = await Task.Run(() => {
    return 1; 
});
Console.WriteLine(result); //is 1

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

1
ответ дан 23 November 2019 в 00:08
поделиться
Другие вопросы по тегам:

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