【发布时间】:2018-05-09 05:41:20
【问题描述】:
我试图了解 Lambda 表达式如何与异步方法一起使用。
我有一个函数
private int Server_Get_Int(){
Task<int> task = Task.Factory.StartNew<int>( async () => {
FirebaseClient c = Server_Connect();
FirebaseResponse response = await c.GetAsync("todos/set");
return response.ResultAs<int>(); //The response will contain the data being retreived
} );
task.Wait();
int result = task.Result;
Console.WriteLine(result);
return result;
}
我希望我的异步代码在 lambda 表达式中运行并从服务器取回结果。 但我得到了错误:
error CS4010: Cannot convert async lambda expression to delegate type 'Func<int>'. An async lambda expression may return void, Task or Task<T>, none of which are convertible to 'Func<int>'.
它说我只能返回一个 void、任务或任务,据我了解,我正在返回
task<int>
这是我返回的问题还是因为异步 lambda?
谢谢
编辑:
response.ResultAs<int>()
返回一个 Int 但在任务函数中,它应该作为任务返回
【问题讨论】:
-
response.ResultAs<int>()的类型是什么? -
它返回一个 int,但据我了解,当包装在 Task
中时,它不会作为 Task 返回? -
不,你应该返回
int。比如说,你有这个代码:Func<int> func = () => 10; Task<int> task = Task.Factory.StartNew(func); task.Wait(); int result = task.Result;result变量将是 10。我怀疑这与ResultAs方法有关。 -
它可以连接,但我使用的 API 并没有写太多关于他们制作的功能。
-
但我认为我的问题主要是因为使用异步,大多数问题似乎都来自它。
标签: c# wpf asynchronous lambda