草庐IT

c# - 使用 Task.WaitAll() 来处理等待的任务?

理想情况下我想做的是用非阻塞模式延迟一个任务,然后等待所有任务完成。我试图添加Task.Delay返回的任务对象,然后使用Task.WaitAll但这似乎无济于事。我该如何解决这个问题?classProgram{publicstaticasyncvoidFoo(intnum){Console.WriteLine("Thread{0}-Start{1}",Thread.CurrentThread.ManagedThreadId,num);varnewTask=Task.Delay(1000);TaskList.Add(newTask);awaitnewTask;Console.Write

c# - 使用 Task.WaitAll() 来处理等待的任务?

理想情况下我想做的是用非阻塞模式延迟一个任务,然后等待所有任务完成。我试图添加Task.Delay返回的任务对象,然后使用Task.WaitAll但这似乎无济于事。我该如何解决这个问题?classProgram{publicstaticasyncvoidFoo(intnum){Console.WriteLine("Thread{0}-Start{1}",Thread.CurrentThread.ManagedThreadId,num);varnewTask=Task.Delay(1000);TaskList.Add(newTask);awaitnewTask;Console.Write

c# - 几乎相同方法中的不同行为异步/等待

假设我有两个异步方法publicasyncstaticTaskRunAsync1(){awaitTask.Delay(2000);awaitTask.Delay(2000);}和publicasyncstaticTaskRunAsync2(){vart1=Task.Delay(2000);vart2=Task.Delay(2000);awaitt1;awaitt2;}那我就这样用publicstaticvoidM(){RunAsync1().GetAwaiter().GetResult();RunAsync2().GetAwaiter().GetResult();}结果RunAsync

c# - 几乎相同方法中的不同行为异步/等待

假设我有两个异步方法publicasyncstaticTaskRunAsync1(){awaitTask.Delay(2000);awaitTask.Delay(2000);}和publicasyncstaticTaskRunAsync2(){vart1=Task.Delay(2000);vart2=Task.Delay(2000);awaitt1;awaitt2;}那我就这样用publicstaticvoidM(){RunAsync1().GetAwaiter().GetResult();RunAsync2().GetAwaiter().GetResult();}结果RunAsync

c# - 如何将 Task<TDerived> 转换为 Task<TBase>?

因为C#的Task是一个类,你显然不能转换Task到Task.但是,您可以:publicasyncTaskRun(){returnawaitMethodThatReturnsDerivedTask();}有没有我可以调用的静态任务方法来获得Task本质上只是指向底层任务并转换结果的实例?我想要这样的东西:publicTaskRun(){returnTask.FromDerived(MethodThatReturnsDerivedTask());}有这样的方法吗?仅出于此目的使用异步方法是否有任何开销? 最佳答案 Doessucham

c# - 如何将 Task<TDerived> 转换为 Task<TBase>?

因为C#的Task是一个类,你显然不能转换Task到Task.但是,您可以:publicasyncTaskRun(){returnawaitMethodThatReturnsDerivedTask();}有没有我可以调用的静态任务方法来获得Task本质上只是指向底层任务并转换结果的实例?我想要这样的东西:publicTaskRun(){returnTask.FromDerived(MethodThatReturnsDerivedTask());}有这样的方法吗?仅出于此目的使用异步方法是否有任何开销? 最佳答案 Doessucham

c# - 使用 Task.StartNew 时指定线程的名称

有没有办法在使用Task.StartNew方法时指定线程的名称vartask=Task.Factory.StartNew(MyAction,TaskCreationOption.LongRunning,??ThreadName??); 最佳答案 好吧,这行得通:classProgram{staticvoidMain(string[]args){vartask=Task.Factory.StartNew(()=>{Thread.CurrentThread.Name="foo";Thread.Sleep(10000);//UseDebu

c# - 使用 Task.StartNew 时指定线程的名称

有没有办法在使用Task.StartNew方法时指定线程的名称vartask=Task.Factory.StartNew(MyAction,TaskCreationOption.LongRunning,??ThreadName??); 最佳答案 好吧,这行得通:classProgram{staticvoidMain(string[]args){vartask=Task.Factory.StartNew(()=>{Thread.CurrentThread.Name="foo";Thread.Sleep(10000);//UseDebu

c# - CancellationToken 注销操作

我有一个用于各种任务的token,我需要更好地管理它们的取消,以便收到我可以使用的取消通知:token.Register(RegisterMethod);我怎样才能删除这个“订阅”?有什么办法可以“注销”吗?我考虑过使用TaskCompletionSource来解决问题。但我不知道它是否会运作良好。解决这种方法的最佳方法是什么? 最佳答案 CancellationToken.Register返回CancellationTokenRegistration实例。如果您调用Dispose在这种情况下,您的注册将被删除。

c# - CancellationToken 注销操作

我有一个用于各种任务的token,我需要更好地管理它们的取消,以便收到我可以使用的取消通知:token.Register(RegisterMethod);我怎样才能删除这个“订阅”?有什么办法可以“注销”吗?我考虑过使用TaskCompletionSource来解决问题。但我不知道它是否会运作良好。解决这种方法的最佳方法是什么? 最佳答案 CancellationToken.Register返回CancellationTokenRegistration实例。如果您调用Dispose在这种情况下,您的注册将被删除。