C# 是否有针对ValueTask的ContinueWith?
如果API返回一个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
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;//你想执行的代码…
-简单得多