Есть ли ContinueWith для ValueTask? - PullRequest
       19

Есть ли ContinueWith для ValueTask?

2 голосов
/ 25 апреля 2020

Если API возвращает ValueTask или ValueTask<T>, есть ли способ выполнить ContinueWith, как я могу сделать с Task? Есть ли предоставляемая Microsoft библиотека NuGet для этого с NET Standard 2.0?

Ответы [ 2 ]

5 голосов
/ 25 апреля 2020

Использование valueTask.AsTask(). AsTask() - это аварийный люк только для таких случаев использования, как ваш. Цель ValueTask - по возможности избегать выделения, но если вы собираетесь вызывать продолжение в другом потоке, вам нужно будет выделить что-то, и это также может быть Task<T>.

2 голосов
/ 25 апреля 2020

Вот вы:

public static async ValueTask ContinueWith(this ValueTask source,
    Action<ValueTask, Exception> continuationAction)
{
    Exception exception = null;
    try
    {
        await source.ConfigureAwait(false);
    }
    catch (Exception ex)
    {
        exception = ex;
    }
    continuationAction(source, exception);
}
...