【发布时间】:2017-03-27 14:15:34
【问题描述】:
这段代码在VS2015中给出了一个编译时错误
错误 CS0266 无法将类型“System.Threading.Tasks.Task”隐式转换为“System.Threading.Tasks.Task
”。存在显式转换(您是否缺少演员表?)
更新 1:建议在 Task 之后扩展代码而不是 Task
int i = 0;
Task<int> test = Task.Run( () => {
return i;
} );
i = test.Result;
Task t = Task.Run( () => { } );
Task<Task> test2 = Task.Run( () => {
return t;
} );
t = test2.Result;
我做错了什么?
更新 2: 这段代码给出了一个警告(我想要没有警告和禁止编译指示)
警告 CS1998 此异步方法缺少“等待”运算符,将同步运行。考虑使用 'await' 运算符来等待非阻塞 API 调用,或使用 'await Task.Run(...)' 在后台线程上执行 CPU 密集型工作。
int i = 0;
Task<int> test = Task.Run( () => {
return i;
} );
i = test.Result;
Task t = Task.Run( () => { } );
Task<Task> test2 = Task.Run( async () => {
return t;
} );
t = test2.Result;
更新 3:
致所有坚持Task test2的人。
-
StartAndReturnSecondTaskAsync必须返回第二个任务(执行longOperation2) -
StartAndReturnSecondTaskAsync必须是async,即 UI 在longOperation1期间不得阻塞public static async Task<Task> StartAndReturnSecondTaskAsync() { Task t = await Task.Run( () => { return StartAndReturnSecondTask(); } ); return t; } public static Task StartAndReturnSecondTask() { var importantData = longOperation1(); return Task.Run( () => { longOperation2( importantData ); } ); } ... Task second = await StartAndReturnSecondTaskAsync();
【问题讨论】:
-
你确定想要
Task<Task>吗?你打算用它做什么? -
@Stephen Cleary 请参阅更新 3。
-
这并不能解释为什么你需要
Task<Task>而不仅仅是Task。 -
我需要等待第一个任务并返回第二个
-
@PetSertAl 错误 CS0266 无法将类型“System.Threading.Tasks.Task”隐式转换为“System.Threading.Tasks.Task
”。存在显式转换(您是否缺少演员表?)
标签: c# multithreading task