Как сжать 16-битное изображение с помощью стандарта JPEG 2000?

Существует один подлый случай, когда return в обычном методе и return await в async метод ведут себя по-другому: в сочетании с using (или, в более общем смысле, любой return await в блоке try), .

Рассмотрим эти две версии метода:

Task<SomeResult> DoSomethingAsync()
{
    using (var foo = new Foo())
    {
        return foo.DoAnotherThingAsync();
    }
}

async Task<SomeResult> DoSomethingAsync()
{
    using (var foo = new Foo())
    {
        return await foo.DoAnotherThingAsync();
    }
}

Первый метод будет Dispose() объектом Foo, как только метод DoAnotherThingAsync() вернется, что вероятно, задолго до его завершения. Это означает, что первая версия, вероятно, глючит (потому что Foo находится слишком рано), а вторая версия будет работать нормально.

0
задан Luana Gonçalves 17 January 2019 в 00:14
поделиться