任务的回报是什么?

时间:2014-09-10 17:59:48

标签: c# asynchronous task

在过去的几周里,我一直在关注任务,我真的很挣扎。我遇到的一件事就是创建一个没有返回类型的等待方法。

现在我们现在知道非等待的方法是这样的:

//This is a method with a return type:
private string methodWithReturn()
{
     return "This is a string return type";
}
//This is a method without a return type
private void methodWithoutReturn()
{
    //Some random code that has no return
}

现在谈到任务,它真的很复杂。有三种类型:voidTaskTask<T> 根本不推荐void,所以我留下了两个任务。这是问题所在。我想要一个没有返回类型的Task,这是一个代码:

private Task taskTypeMethod()
{
    //some random code
}

这里的问题是它仍然会发出一个警告,&#34;并非所有代码路径都返回一个值&#34;。我不正确地理解任务或者我在这里做错了什么?

我被告知要在它之前添加async,但这需要我在代码块中使用await关键字,我不会使用它。

2 个答案:

答案 0 :(得分:2)

如果没有返回Task,调用者怎么能知道你可能正在运行的异步计算何时完成?如果没有人需要知道,请使方法返回Task并忽略返回值。如果由于某种原因无法实现,您可以使用async void

如何生成要返回的Task对于呼叫者而言并不重要。一种简单的方法是制作方法async Task

  

这里的问题是它仍然会发出一个警告,&#34;并非所有代码路径都返回一个值&#34;。

嗯,这个错误是有道理的。你保证会退货,但你不会。那不行。获取某些Task并将其返回或使用async Task。也许你需要找出async甚至意味着什么。

答案 1 :(得分:0)

我认为您可能错误地理解Task

如果你设置这样的方法:

private Task taskTypeMethod()
{
  //some random code
}

...然后你必须返回一个Task对象。这是方法的基本要求:具有返回类型的那些需要返回该类型的值。

但这并不意味着Task本身在完成时必须返回一个值。你可以这样做:

Task t = Task.Run( () => // some random code );

这会给你一个Task来执行你的“随机代码”。但是“随机代码”不需要返回值。