ValueTask
(如普通的ValueTask
,而不是ValueTask<T>
)已同步完成,使得valueTask.IsCompletedSuccessfully
为真。 ValueTask
尚未被 await
编辑。我如何告诉运行时我已经完成了 ValueTask
,并且如果它碰巧有 IValueTaskSource
支持,它可以被重用?
ValueTask<T>
具有 Result
属性,访问它(大概)会将 ValueTask<T>
标记为已消耗,但普通的 ValueTask
没有 Result
。
IValueTaskSource
ValueTask
方法来通知底层 .GetAwaiter()
对象 .GetResult()
已被消耗:
if (valueTask.IsCompletedSuccessfully)
{
valueTask.GetAwaiter().GetResult();
}
ValueTaskAwaiter
是一个结构体。
注意: 在任务完成之前调用
.GetAwaiter().GetResult()
对于 ValueTask
来说不是有效的操作。还禁止多次调用 .GetAwaiter().GetResult()
,或与任何其他消耗操作(如 await
或 AsTask
)同时调用。这些限制记录在 ValueTask
结构的 Remarks部分。