C# 在第一个任务之后运行另一个任务
我有这样一个简单的方法,但我不能如下运行C# 在第一个任务之后运行另一个任务,c#,.net,task,C#,.net,Task,我有这样一个简单的方法,但我不能如下运行runAfter,但编译器说: 错误CS1503参数1:无法从“System.Threading.Tasks.Task”转换为“System.Action” static async Task TaskSyncWithRemote(string subFolder, Task runAfter) { ... some code run here ... // now I want to run "runAfter", but
runAfter
,但编译器说:
错误CS1503参数1:无法从“System.Threading.Tasks.Task”转换为“System.Action”
static async Task TaskSyncWithRemote(string subFolder, Task runAfter)
{
...
some code run here
...
// now I want to run "runAfter", but compiler doesn't like it :)
if (runAfter!=null)
Task.Run(runAfter);
}
虽然不推荐。您可以在
runAfter
if (runAfter!=null)
runAfter.Start();
至于为什么不推荐,我建议这样做
根据提供的关于您的问题的详细程度和上下文,我只能假设您正在执行以下操作:
Task runAfter = new Task(() => /* do something */);
await TaskSyncWithRemote("mySubfolder",runAfter);
但是,更好的方法是重构您的方法tasksynchwithremote
,只执行其工作,并通过nice TPL api将继续任务的触发留给TaskScheduler,例如:
await TaskSyncWithRemote("mySubfolder").ContinueWith(() => /* do something */);
您正试图将任务对象传递给Task.Run()方法,但编译器告诉您不能:)编译器是个聪明人,您应该听他的。例如,您可以将操作传递给Task.Run()。但是,我认为您对ContinueWith()方法更感兴趣 //现在我想跑“追跑” 输入此方法时,
runAfter
已在进行中
如果需要,您可以(异步)等待它完成:
static async Task TaskSyncWithRemote(string subFolder, Task runAfter)
{
... // Code executed while `runAfter` is in progress.
await runAfter;
... // Code executed after `runAfter` is done.
}
如果您的意思是不希望在该点之前运行runAfter
,则必须将参数的类型更改为Func
,并在此时调用它:
static async Task TaskSyncWithRemote(string subFolder, Func<Task> runAfter)
{
... // Code executed before `runAfter` starts.
await runAfter();
... // Code executed after `runAfter` is done.
}
静态异步任务TaskSyncWithRemote(字符串子文件夹,Func runAfter)
{
…//在“runAfter”启动之前执行的代码。
等待runAfter();
…//在“runAfter”完成后执行的代码。
}
Task.Run()需要一个操作委托作为参数。您正在向它传递一个Task类型的对象,因此出现了您读取的错误。你能把runAfter的代码发出来吗?我认为你可以重构你的代码来达到你的最终目标,你应该陈述你的问题是什么。我们可以算出来,但你在这里只做了陈述。您没有问我们任何问题。请(1)不要建议不推荐的内容,(2)不要链接到外部网站,以及(3)您应该尝试回答所问的问题。@Enigmativity我确实回答了问题,建议了一个有效的解决方案。并警告了不利因素。我见过的最糟糕的否决票和评论@神秘性,从什么时候开始有禁止外部网站的规定?!更糟糕的是,你想让我回答这个问题,但在你的评论中,你无法理解这个问题是什么!对不起,关于外部链接我应该更清楚。鼓励外部链接,但仅支持您答案中已有的内容-如果链接断开,则答案在没有链接的情况下就足够了。你应该把链接站点的要点纳入你的答案中。这个问题是可以推断出来的,但是如果OP明确地问这个问题,这将有助于提高站点的质量。你还没有解释调用.Start()
如何允许OP在第一个任务之后运行第二个任务。如果你能展示一些代码来解释OP如何使用,那就太棒了。在他的特定示例中,继续使用。如果他只是使用构造函数创建任务,它不会已经在进行中了then@SirajMansour当前位置由于没有很好的理由这样做,我认为op没有。