此代码试图获取复杂类型值的详细信息。
我正在使用带有等待的任务。但是,我仍然收到警告,提示等待操作符确实 不存在。
我不确定我的语法或理解哪里出了问题。
namespace TaskWithReturnComplexTypeValue
{
class Program
{
static void Main(string[] args)
{
SomeMethod();
Console.ReadKey();
}
private async static void SomeMethod()
{
Employee emp = await GetEmployeeDetails();
Console.WriteLine($"Id:{emp.Id}, Name: {emp.Name}, Salary: {emp.Salary} ");
}
// I get a warning about this async method not having an await operator, though I am using one above.
static async Task<Employee> GetEmployeeDetails()
{
Employee employee = new Employee()
{
Id = 101,
Name = "Kiran Kumar",
Salary = 1000
};
return employee;
}
public class Employee
{
public int Id { get; set; }
public string Name { get; set; } = string.Empty;
public int Salary { get; set; }
}
}
}
我期待这个程序能够运行。但是我收到一条警告:“此异步方法没有等待运算符。
您不需要使用async
关键字来创建异步方法。 (至少如果您使用 TPL,这或多或少是事实上的标准),重要的是您返回
Task
或
Task<...>
。
async
关键字是可选,只是在幕后添加一些语法糖,允许您直接返回
<...>
对象,而无需将其包装在任务对象中,并允许您使用
await
。您可以像这样从方法中删除
async
关键字(注意返回行)
static Task<Employee> GetEmployeeDetails()
{
Employee employee = new Employee()
{
Id = 101,
Name = "Kiran Kumar",
Salary = 1000
};
return Task.FromResult(employee);
}
重要的是要知道 GetEmployeeDetails
方法本身是否使用
async
与调用它的方法完全独立。
SomeMethod
具有
async
和
await
,但这与
GetEmployeeDetails
的工作原理无关。