在过去的几周里,我一直在关注任务,我真的很挣扎。我遇到的一件事就是创建一个没有返回类型的等待方法。
现在我们现在知道非等待的方法是这样的:
//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
}
现在谈到任务,它真的很复杂。有三种类型:void
,Task
和Task<T>
根本不推荐void
,所以我留下了两个任务。这是问题所在。我想要一个没有返回类型的Task,这是一个代码:
private Task taskTypeMethod()
{
//some random code
}
这里的问题是它仍然会发出一个警告,&#34;并非所有代码路径都返回一个值&#34;。我不正确地理解任务或者我在这里做错了什么?
我被告知要在它之前添加async
,但这需要我在代码块中使用await
关键字,我不会使用它。
答案 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
来执行你的“随机代码”。但是“随机代码”不需要返回值。