gpt4 book ai didi

c# - 立即为在 ContinueWith block 内构建的调用调用任务?

转载 作者:行者123 更新时间:2023-11-30 17:45:31 25 4
gpt4 key购买 nike

首先,为标题道歉;我真的想不出如何简洁地表达我想做的事情。

我有以下两个功能:

主要代码:

private async Task<PreparationInfo> PrepareRoundtrip()
{
PreparationInfo output = new PreparationInfo();

Task.Delay(3000); // stands in for a call to the server to fetch data for how to prepare

prepare(output) // package result into output

return output;
}

private Task ExecuteWithPrepare()
{
if (!PrepareEnabled) // instance variable
return stateObject.Execute();
else
{
Task<PreparationInfo> prepareTask = PrepareRoundtrip();
return tceTask.ContinueWith((prepareTaskInternal) =>
{
stateObject.Execute(); // this is the Task that I need to return
});
}
}

stateObject.Execute() header :

internal Task Execute()
{
...
}

我正在为 stateObject.Execute() 方法编写一个包装器,它可以选择调用一个准备方法 (PrepareRoundtrip()),以便在执行之前预先处理一些参数.

如果未启用准备 (PrepareEnabled == false),我可以直接调用 Execute() 方向并立即返回它返回的任务。如果启用了准备,我需要运行准备方法(这是此任务所特有的,我可以根据需要更改它),然后运行Execute()

我坚持的部分是:

整个函数需要像直接调用 stateObject.Execute() 一样运行并返回,只是添加了 PrepareRoundtrip() 部分,这意味着两件事:

  1. ExecuteWithPrepare() 返回的任务需要代表 stateObject.Execute() 返回的任务。

  2. ExecuteWithPrepare() 需要立即返回(即等待 PrepareRoundtrip() 中的 3 秒延迟)

实现此目标的最佳方法是什么?谢谢!

长话短说:

stateObject.Execute() 添加一个包装器以添加一个可能很长的额外准备步骤;需要整个过程立即返回代表原始结果的任务,而不是等待准备步骤先完成。

最佳答案

  1. 使用 UnwrapTask<Task> (这就是你所拥有的)到 Task代表完成内部Task ,无需同步等待外部任务完成。

  2. 只是await Task<Task>两次,而不是一次,如果在 async 中方法。

关于c# - 立即为在 ContinueWith block 内构建的调用调用任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27494389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com