嗨,我有以下短代碼提取。該代碼的目的是從任務中返回一個人物並獲得結果,以便它可以在main中訪問。C#從任務返回數據
我有的代碼如下,但編譯時出現兩個錯誤。
錯誤2「System.Threading.Tasks.Task multi_threaded_tasks.Program.ExecuteAsync_GetPerson()」具有錯誤 返回類型
錯誤1的對象引用是所必需的 非靜態字段,方法,或物業 「multi_threaded_tasks.Program.ExecuteAsync_GetPerson()」
我不知道我要去哪裏錯了,你可以提供任何幫助將是有益的。 P.S如果有更好的方法來返回對象我打開建議,但我希望功能調用是分開的。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
namespace multi_threaded_tasks
{
public class Person
{
public string first_name;
public string last_name;
//Constructor
public Person()
{
first_name="";
last_name="";
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Main started:");
CancellationTokenSource cancelSource;
Task<Person> t_person = Task<Person>.Factory.StartNew(
function: ExecuteAsync_GetPerson,
cancellationToken: cancelSource.Token,
creationOptions: TaskCreationOptions.PreferFairness,
scheduler: TaskScheduler.Default);
Person main_person = t_person.Result;
Console.WriteLine("The person first name:" + main_person.first_name);
Console.WriteLine("The person last name:" + main_person.last_name);
Console.WriteLine("Main Ended:");
}
async Task<Person> ExecuteAsync_GetPerson()
{
Console.WriteLine("ExecuteAsync_GetPeople started:");
Person a_person = new Person();
a_person.first_name="";
a_person.last_name="";
await Task.Delay(2000); // Wait 2 seconds
Console.WriteLine("ExecuteAsync_GetPeople returning:");
return a_person;
}
}
}
1.你沒有初始化你的'CancellationSource',這就是你得到'NullReferenceException'的原因。 2.'StartNew'預計'Func',而不是'Func <任務>',這是導致其他錯誤。 –
MarcinJuraszek
不要使用'Task.Factory.StartNew',如果你在.NET 4.5+上,除非你真的知道,你在做什麼。改爲使用'Task.Run'。 – Dennis