Информация об изменениях

Сообщение Re[9]: ContinueWith от 29.01.2020 11:25

Изменено 29.01.2020 11:32 alexzzzz

Re[9]: ContinueWith
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Этот карго-культ экономит много времени на глупых трудновылавливаемых ошибках, вызванных забытым await. Оно, кстати, не только при просмотре кода полезно, решарпер использует наличие суффикса в одном из своих анализов на предмет как раз забытого await.


Ещё, когда я вызывают метод Task<T> DoSomethingAsync(), то ожидаю, что вернувшийся таск уже работает и надо только дождаться результата. А если DoSomething() возвращает Task, то большой вопрос, что с ним делать, запускать самому или он уже запущен и где-то работает. Интуитивно ожидается, то вернувшийся таск пока не запущен.

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

internal class Program
{
    private static async Task Main(string[] args)
    {
        var task = DoSomething();
        //task.Start();
        Console.WriteLine("waiting...");
        var result = await task;

        Console.WriteLine(result);
    }

    private static Task<int> DoSomething()
    {
        return new Task<int>(() =>
        {
            Thread.Sleep(1000);
            return 42;
        });
    }
}
Re[9]: ContinueWith
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Этот карго-культ экономит много времени на глупых трудновылавливаемых ошибках, вызванных забытым await. Оно, кстати, не только при просмотре кода полезно, решарпер использует наличие суффикса в одном из своих анализов на предмет как раз забытого await.


Ещё, когда я вызывают метод Task<T> DoSomethingAsync(), то ожидаю, что вернувшийся таск уже работает и надо только дождаться результата. А если DoSomething() возвращает Task, то большой вопрос, что с ним делать, запускать самому или он уже запущен и где-то работает. Интуитивно ожидается, то вернувшийся таск пока не запущен либо уже синхронно выполнился.

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

internal class Program
{
    private static async Task Main(string[] args)
    {
        var task = DoSomething();
        //task.Start();
        Console.WriteLine("waiting...");
        var result = await task;

        Console.WriteLine(result);
    }

    private static Task<int> DoSomething()
    {
        return new Task<int>(() =>
        {
            Thread.Sleep(1000);
            return 42;
        });
    }
}