c# - 在 C# 中返回任务的正确方法
问题描述
我有一个场景,我需要返回一个可以等待调用者的方法。
我在这里有我的实现,我只想知道哪个是正确的。
方法一。
public class ClassA
{
public Task MyTask { get; set; }
public ClassA()
{
MyTask = MyAsyncMethod();
}
private async void MyAsyncMethod()
{
await LongProcessHere();
}
}
public class MyCaller()
{
private async void ExecuteAsync()
{
ClassA ca = new ClassA();
await ca.MyTask;
}
}
方法2。
public class ClassA
{
public Task MyAsyncMethod()
{
return Task.Run(async()=>
{
await LongProcessHere();
});
}
}
public class MyCaller()
{
private async void ExecuteAsync()
{
ClassA ca = new ClassA();
await ca.MyAsyncMethod();
}
}
解决方案
如果您问我是否应该公开属性或方法,那么这完全取决于所Task
代表的内容。
如果任务是每个类的实例完成一次,那么有一个Task
属性是合适的。通常在这种情况下,该属性表示有关实例的某些内容,例如“我的初始化已完成”或“我已完成处理”。
如果任务是您需要多次执行的任务,那么使用Task
-returning 方法是合适的。
Task
-返回方法比Task
属性更常见。
在旁注中,避免async void
并且不要Task.Run
不必要地使用.
推荐阅读
- ruby-on-rails - Searchkick:提升未来日期
- python-3.x - 在查询中比较 SQL 日期时间对象和 Python 日期时间对象的正确方法是什么?
- php - 如何使用 PHP 和服务帐户创建辅助谷歌日历?
- python - 如何忽略列表中的 NaN 值?
- r - 获取嵌套变量并将它们映射到预测值?
- ruby - 你能帮我在抓取更多数据的同时将数组转换为索引吗?
- reactjs - 确定正在调用哪些钩子
- python - pygame.error: 显示 Surface 退出 - 为什么会这样?
- c++ - 带智能指针的多态性
- python-3.x - 想要在 Python 中跨一组 ID 变量转置时间数据