C#继续完成任务并给出结果
我使用这个代码C#继续完成任务并给出结果,c#,C#,我使用这个代码 public static void Main() { Task<int> t = new Task<int>(() => { return 43; }); t.Start(); t.ContinueWith((i) => {return i.Result * 2; }); Console.WriteLine("i = {0}", t.Result.ToStrin
public static void Main()
{
Task<int> t = new Task<int>(() => { return 43; });
t.Start();
t.ContinueWith((i) => {return i.Result * 2; });
Console.WriteLine("i = {0}", t.Result.ToString());
Console.Read();
}
publicstaticvoidmain()
{
Task t=新任务(()=>{return 43;});
t、 Start();
t、 ContinueWith((i)=>{return i.Result*2;});
WriteLine(“i={0}”,t.Result.ToString());
Console.Read();
}
我注意到t的结果是43,而不是86。
如果我在控制台中显示的连续打印内容。
为什么结果不被ContinueWith修改
致以最良好的祝愿,这是因为创建了一个全新的任务,您忽略了该任务的结果,而是打印了第一个任务的结果,这是正确的43
。请尝试以下代码段:
Task<int> t = new Task<int>(() => { return 43; });
t.Start();
var t2 = t.ContinueWith((i) => {return i.Result * 2; });
Console.WriteLine("i = {0}", t2.Result.ToString());
Task t=新任务(()=>{return 43;});
t、 Start();
var t2=t.ContinueWith((i)=>{返回i.Result*2;});
WriteLine(“i={0}”,t2.Result.ToString());
ContinueWith将在第一个任务完成执行时创建一个新任务,该任务可能使用或不使用同一线程,因为它取决于任务调度程序
您可以使用以获得第二个任务的结果
您的代码将如下所示
static void Main(string[] args)
{
Task<int> t = new Task<int>(() => { return 43; });
t.Start();
Task<int> t2 = t.ContinueWith<int>((i) => { return i.Result * 2; });
Console.WriteLine("i = {0}", t2.Result.ToString());
Console.Read();
}
static void Main(字符串[]args)
{
Task t=新任务(()=>{return 43;});
t、 Start();
任务t2=t.ContinueWith((i)=>{返回i.Result*2;});
WriteLine(“i={0}”,t2.Result.ToString());
Console.Read();
}
其他两个答案是正确的。还有另一个任务
通过ContinueWith
返回。如果你不在乎每一步。。然后,您的代码可以通过在链接它们之后分配ContinueWith
的值而变得更小:
var t = Task.Run(() => 43)
.ContinueWith(i => i.Result * 2);
// t.Result = 86
您会发现很多基于任务的代码都遵循这一点。当您在末尾链接
ContinueWith
时,通常不会创建和启动单个任务
实例。当您有一个填充实体的存储库时,我会使用continue with,但之后您将需要viewmodel:
/// <summary>
/// fill automatically person data
/// </summary>
/// <param name="identification">search for this identification</param>
/// <param name="cdmIdentification">this type of identification is search for</param>
/// <returns>found person information</returns>
[HttpPost]
[Authorize(Policy = "RequireAuthenticatedRole")]
public async Task<PersonEditViewModel> AutoFillPerson(string identification, PersonRepository.CDMIdentification cdmIdentification)
{
// get person entity from database
var task = new PersonRepository().GetPersonFromCdm(identification, cdmIdentification);
// put it in a person viewmodel.
return await task.ContinueWith((p) => new PersonEditViewModel() { Person = p.Result } );
}
//
///自动填充个人数据
///
///搜索此标识
///这种类型的标识正在搜索中
///找到人信息
[HttpPost]
[授权(Policy=“RequireAuthenticatedRole”)]
公共异步任务AutoFillPerson(字符串标识,PersonRepository.CDMIdentification CDMIdentification)
{
//从数据库中获取个人实体
var task=newPersonRepository().GetPersonFromCdm(标识,CDMIDIdentification);
//将其放在person viewmodel中。
返回wait task.ContinueWith((p)=>newpersoneditViewModel(){Person=p.Result});
}