Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用new关键字创建具有多个参数的任务、返回类型、TaskCreationOptions参数?_C#_Task Parallel Library_Task - Fatal编程技术网

C# 如何使用new关键字创建具有多个参数的任务、返回类型、TaskCreationOptions参数?

C# 如何使用new关键字创建具有多个参数的任务、返回类型、TaskCreationOptions参数?,c#,task-parallel-library,task,C#,Task Parallel Library,Task,如何使用new创建具有多个参数、返回类型和createoptions的新任务 Task<int> task = Task<int>(DoWork(0,1)); private static Task<int> DoWork(int a, int b) { return null; } Task Task=Task(DoWork(0,1)); 私有静态任务DoWork(intA、intB) { 返回null; } 这很好用。。。。但当我尝试使用

如何使用new创建具有多个参数、返回类型和createoptions的新任务

Task<int> task = Task<int>(DoWork(0,1));

private static Task<int> DoWork(int a, int b)
{
    return null;
} 
Task Task=Task(DoWork(0,1));
私有静态任务DoWork(intA、intB)
{
返回null;
} 
这很好用。。。。但当我尝试使用new关键字创建任务时,我可以将startoptions设置为longrunning,如下所示:

Task<int> task = new Task<int>(DoWork(0,1), TaskCreationOptions.LongRunning);
Task Task=新任务(DoWork(0,1),TaskCreationOptions.LongRunning);
我总是会犯一些错误,比如: 参数1:无法从“System.Threading.Tasks.Task”转换为“System.Func”


我尝试了xx种不同的变体,但没有成功。我知道我可能错误地传递了param“Func function”。我想避免匿名函数。thx.

您可以将该方法作为
Lambda表达式传递:

Task<Task<int>> task = new Task<Task<int>>(() => DoWork(0,1), TaskCreationOptions.LongRunning);
publicsomeclass()
{
var func=新func((i1,i2)=>i1+i2);
Task.Factory.StartNew(()=>
Debug.WriteLine(func(1,2)),TaskCreationOptions.LongRunning);
Task.Factory.StartNew(()=>
Debug.WriteLine(DoWork(2,3.Result),TaskCreationOptions.longlunning);
}
私有静态任务DoWork(intA、intB)
{
返回任务.FromResult(a+b);
}
for
任务
需要一个
Func
参数

Task<int> task = Task<int>(DoWork(0,1));
然后你可以做:

Task<int> task = new Task<int>(() => DoWork(0,1), TaskCreationOptions.LongRunning);
Task Task=新任务(()=>DoWork(0,1),TaskCreationOptions.LongRunning);

DoWork
返回一个
任务
而不是
int
,因此它不会编译。
Task<int> task = Task<int>(DoWork(0,1));
private static int DoWork(int a, int b) { ... }
Task<int> task = new Task<int>(() => DoWork(0,1), TaskCreationOptions.LongRunning);