C# 如何在没有Func的异步委托上创建任务<&燃气轮机;变量

C# 如何在没有Func的异步委托上创建任务<&燃气轮机;变量,c#,.net,asynchronous,async-await,C#,.net,Asynchronous,Async Await,我有以下代码: DateTime start = DateTime.Now; Func<Task<double>> f = async () => { await Task.Delay(3000, cts.Token); return (DateTime.Now - start).TotalMilliseconds; }; Task<double> delayTask = f(); DateTime start=DateTime.Now

我有以下代码:

DateTime start = DateTime.Now;
Func<Task<double>> f = async () =>
{
    await Task.Delay(3000, cts.Token);
    return (DateTime.Now - start).TotalMilliseconds;
};
Task<double> delayTask = f();
DateTime start=DateTime.Now;
Func f=async()=>
{
等待任务延迟(3000,cts.Token);
return(DateTime.Now-start).total毫秒;
};
任务延迟任务=f();
但是如果不先将委托分配给变量,我就无法理解如何将其作为一条语句来编写。也就是说,我觉得我应该可以像

Task<double> delayTask = (async () =>
{
    await Task.Delay(3000, cts.Token);
    return (DateTime.Now - start).TotalMilliseconds;
})();
Task delayTask=(异步()=>
{
等待任务延迟(3000,cts.Token);
return(DateTime.Now-start).total毫秒;
})();
甚至

Task<double> delayTask = new Task<double>(async () =>
{
    await Task.Delay(3000, cts.Token);
    return (DateTime.Now - start).TotalMilliseconds;
});
Task delayTask=新任务(异步()=>
{
等待任务延迟(3000,cts.Token);
return(DateTime.Now-start).total毫秒;
});

但两者都会产生编译错误。我错过了什么?

我想你要找的是:

Task<double> delayTask = new Func<Task<double>>(async () => 
{  
    await Task.Delay(3000, cts.Token); 
    return (DateTime.Now - start).TotalMilliseconds; 
})();
Task delayTask=newfunc(异步()=>
{  
等待任务延迟(3000,cts.Token);
return(DateTime.Now-start).total毫秒;
})();

我想你要找的是:

Task<double> delayTask = new Func<Task<double>>(async () => 
{  
    await Task.Delay(3000, cts.Token); 
    return (DateTime.Now - start).TotalMilliseconds; 
})();
Task delayTask=newfunc(异步()=>
{  
等待任务延迟(3000,cts.Token);
return(DateTime.Now-start).total毫秒;
})();

您收到错误的原因与无法编译此文件的原因相同:

var f = async () =>
{
    await Task.Delay(3000, cts.Token);
    return (DateTime.Now - start).TotalMilliseconds;
};
您必须在某个地方指定所需的类型,以便类型推断能够工作。更多

但是,您可以通过简单的强制转换消除对变量的需求:

var delayTask = ((Func<Task<double>>) (async () =>
{
    await Task.Delay(3000, cts.Token);
    return (DateTime.Now - start).TotalMilliseconds;
}))();
var delayTask=((Func)(async()=>
{
等待任务延迟(3000,cts.Token);
return(DateTime.Now-start).total毫秒;
}))();

您收到错误的原因与无法编译此文件的原因相同:

var f = async () =>
{
    await Task.Delay(3000, cts.Token);
    return (DateTime.Now - start).TotalMilliseconds;
};
您必须在某个地方指定所需的类型,以便类型推断能够工作。更多

但是,您可以通过简单的强制转换消除对变量的需求:

var delayTask = ((Func<Task<double>>) (async () =>
{
    await Task.Delay(3000, cts.Token);
    return (DateTime.Now - start).TotalMilliseconds;
}))();
var delayTask=((Func)(async()=>
{
等待任务延迟(3000,cts.Token);
return(DateTime.Now-start).total毫秒;
}))();

是的,我几分钟前刚想到,它已经试过了,确实可以完成任务,尽管它似乎仍然需要更多的语法。是的,我几分钟前刚刚想到,它已经试过了,确实可以完成任务,尽管它似乎仍然需要更多的语法。