为什么我的带有等待运算符的 C# .net 8 程序使用任务时告诉我没有等待运算符?

问题描述 投票:0回答:1

此代码试图获取复杂类型值的详细信息。

我正在使用带有等待的任务。但是,我仍然收到警告,提示等待操作符确实 不存在。

我不确定我的语法或理解哪里出了问题。

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; }
        }
    }
}

我期待这个程序能够运行。但是我收到一条警告:“此异步方法没有等待运算符。

c# async-await task
1个回答
0
投票

您不需要使用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
 的工作原理无关。

© www.soinside.com 2019 - 2024. All rights reserved.