Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有针对ValueTask的ContinueWith?_C#_.net_Async Await_Valuetask - Fatal编程技术网

C# 是否有针对ValueTask的ContinueWith?

C# 是否有针对ValueTask的ContinueWith?,c#,.net,async-await,valuetask,C#,.net,Async Await,Valuetask,如果API返回一个ValueTask或ValueTask,有没有一种方法可以像我处理Task那样在其上执行ContinueWith?是否有Microsoft提供的NuGet库可用于.NET Standard 2.0?给您: public static async ValueTask ContinueWith(this ValueTask source, Action<ValueTask, Exception> continuationAction) { Excepti

如果API返回一个
ValueTask
ValueTask
,有没有一种方法可以像我处理
Task
那样在其上执行
ContinueWith
?是否有Microsoft提供的NuGet库可用于.NET Standard 2.0?

给您:

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);
}
公共静态异步ValueTask ContinueWith(此ValueTask源,
行动(继续行动)
{
异常=空;
尝试
{
等待源。配置等待(false);
}
捕获(例外情况除外)
{
例外=例外;
}
continuationAction(源、异常);
}

使用
AsTask()
是一个逃生舱口,适用于像您这样的用例。
ValueTask
的目的是尽可能避免分配,但如果要在另一个线程上调用延续,则需要分配一些内容,它也可能是一个
任务
我知道我发布它太晚了。但是我想分享我使用的方法

ValueTask<T> vt = ValueTaskTReturningMethod();
var awt = vt.GetAwaiter();
awt.OnCompleted(() => {
   T val = awt.GetResult();
   //code you want to execute after async operation completes
}
ValueTask vt=ValueTaskTReturningMethod();
var awt=vt.GetAwaiter();
awt.未完成(()=>{
T val=awt.GetResult();
//异步操作完成后要执行的代码
}

ContinueWith
是遗留API。坦率地说,你根本不应该使用它。你应该
等待任务和价值任务。或者只是
t val=wait vt;//你想执行的代码…
-简单得多