gpt4 book ai didi

c# - 参数化 Action

转载 作者:行者123 更新时间:2023-11-30 19:54:58 24 4
gpt4 key购买 nike

我不小心遇到了一个我能够解决的问题。但是,我担心自己无法理解为什么错误代码能够编译(首先)。

以下是错误代码,编译正常:

Task<string> myTask = Task<string>.Factory.StartNew(() =>
{
System.Threading.Thread.Sleep(1000);
return "mystrineg";
});
myTask.ContinueWith(t => action, CancellationToken.None,
TaskContinuationOptions.NotOnFaulted, TaskScheduler.Default);

上面代码的问题是:action 根本不会被调用。这是我所做的修复:

Task<string> myTask = Task<string>.Factory.StartNew(() =>
{
System.Threading.Thread.Sleep(1000);
return "mystrineg";
});
myTask.ContinueWith(t => action(t.Result), CancellationToken.None,
TaskContinuationOptions.NotOnFaulted, TaskScheduler.Default);

我的问题是,为什么编译器允许在没有参数的情况下调用参数化操作?

最佳答案

您的第一个代码将使用此 overload ,它会做的是返回 Action 委托(delegate)并且根本不会执行它。

您实际需要的重载是 this你的第二个代码实际使用它并将执行你的操作。

我想知道你为什么不使用 async and await而不是 ContinueWithTask.Run而不是 Task.Factory.StartNew,它可以是 dangerous .

您的代码可以简单得多:

Task<string> myTask = Task.Run(() =>
{
System.Threading.Thread.Sleep(1000);
return "mystrineg";
});
string str = await myTask;
action(str);

关于c# - 参数化 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40085086/

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