gpt4 book ai didi

c# - Task 在C#中是非法的?

转载 作者:行者123 更新时间:2023-12-03 13:17:03 31 4
gpt4 key购买 nike

此代码在VS2015中给出了编译时错误

Error CS0266 Cannot implicitly convert type 'System.Threading.Tasks.Task' to 'System.Threading.Tasks.Task<System.Threading.Tasks.Task>'. An explicit conversion exists (are you missing a cast?)


更新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:
这段代码给出了 警告(我不希望出现任何警告,也不想抑制编译指示)

Warning CS1998 This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread.

        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,即,在longOperation1期间,UI不得阻塞
    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.Run来执行一些异步操作,如果使用较旧的方法StartNew,它将完成您所期望的工作,即计划一个线程池线程来启动异步操作,并告诉您何时进行异步操作操作已开始完成。

    但是,这基本上不是人们真正想要的。他们想知道Task.RUn中调用的异步操作何时完成。因此,Task.Run将解开任何Task<Task> that would be returned, so that what you're really seeing is the inner Task`。

    如果确实只想让线程池线程启动任务,并且只知道何时完成启动,则可以使用Task.Factory.StartNew而不代表您解开Task<Task>

    关于c# - Task <Task>在C#中是非法的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43048866/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com