【C#-等待来自其他类的任务】教程文章相关的互联网学习教程文章

c# – 无阻塞的顺序异步任务【代码】

我有一个使用相当简单的MVVM方法的C#WPF应用程序.在其中一个ViewModel中,我希望按顺序运行一系列任务,但是希望将每个异步运行到主线程.我希望能够在任务之间报告进度的粒度,但我不想在任何任务运行时阻止GUI. 是否有实现这一目标的标准方法,或“最佳实践”? 我已经实现了一些使用BackgroundWorker的东西,我觉得它很快乐,并且有点惊骇.把整个事情搞砸的代码感觉特别是非C#ish.我觉得必须有一个更好的,或者至少是一种既定的方式来做...

c# – 如何将任务的已取消状态传播到延续任务【代码】

我在我的应用程序中使用任务并行库.我有一个任务(让我们称之为“DoSomething”)可能被取消.无论任务是故障,取消还是成功完成,我都会继续执行该任务,执行一些清理工作. 在启动此任务的代码中,我想返回一个Task对象,其状态(出错,取消,运行完成)反映了DoSomething任务的状态,但重要的是我返回的这个任务不会反映这个状态,直到继续任务执行. 这是一个例子:public Task Start(CancellationToken token) {var doSomethingTask = Task.Fa...

c# – 基于任务的空闲检测【代码】

想要限制某些事件之间的间隔并且如果超过限制则采取措施并不罕见.例如,网络对等体之间的心跳消息用于检测另一端是否存活. 在C#async / await样式中,可以通过每次心跳到达时替换超时任务来实现:var client = new TcpClient { ... }; await client.ConnectAsync(...);Task heartbeatLost = new Task.Delay(HEARTBEAT_LOST_THRESHOLD); while (...) {Task<int> readTask = client.ReadAsync(buffer, 0, buffer.Length);Task first = ...

c# – 如何将一个任务列表转换为一个Observable并在元素完成时处理它们?【代码】

给出一组任务:var americanAirlines = new FlightPriceChecker("AA"); ... var runningTasks = new List<Task<IList<FlightPrice>>> {americanAirlines.GetPricesAsync(from, to),delta.GetPricesAsync(from, to),united.GetPricesAsync(from, to) };我想按照它们到达的顺序处理GetPricesAsync()的结果.目前,我正在使用while循环来实现此目的:while (runningTasks.Any()) {// Wait for any task to finishvar completed = await ...

c# – 没有TaskCompletionSource的任务链接?【代码】

我正在将一些异步/等待代码转换为链式任务,因此我可以在已发布的框架中使用它.等待代码看起来像这样public async Task<TraumMessage> Get() {var message = await Invoke("GET");var memorized = await message.Memorize();return memorized; }哪里Task<TraumMessage> Invoke(string verb) {} Task<TraumMessage> Memorize() {}我希望链接Invoke和Memorize以返回Memorize生成的任务,但这会导致任务< Task< TraumMessage>.我最终得到...

如何在c#中完成任务后停止所有任务【代码】

我有不同的任务从不同的文件中读取并在其中找到一个单词.我把它们放入一个任务数组,我从waitAny方法开始,如下所示:foreach (string file in filesList){files[i] = Task.Factory.StartNew(() =>{mySearch.Invoke(file);});i++;}System.Threading.Tasks.Task.WaitAny(files);我想在其中一个任务完成后立即停止所有其他任务(它在找到该单词时结束).目前,有了waitany,我可以知道一个任务什么时候结束,但我不知道怎么知道哪一个完成了...

C#和任务 – UI线程挂起 – 预异步/等待关键字【代码】

当我无法访问我用来检索数据的客户端lib时,我试图理解异步获取一组数据的正确代码是什么.我指定了一个端点和一个日期范围,我应该检索一个播放列表列表.我现在所拥有的东西在Start()调用之后永远不会回来.注意:这是在WinForm中运行的.我试图更好地理解任务,而不只是想跳到等待或BackgroundWorker.我知道我在某个地方迷路了.private void GoButtonClick(object sender, EventArgs e){string baseUrl = "http://someserver/api";var ...

获取C#中执行任务的统计信息【代码】

我有以下简单的代码:var tasks = statements.Select(statement => _session.ExecuteAsync(statement)); var result = Task.WhenAll(tasks).Result; [...]如何计算所有已执行任务的最小值,最大值,平均值等?任务类没有像“executedMilliseconds”这样的属性解决方法:使用以下扩展方法:public static class EnumerableExtensions {public static IEnumerable<Task<TimedResult<TReturn>>> TimedSelect<TSource, TReturn>(this IEnu...

c# – 如何取消任务但等到它完成?【代码】

我有线程任务,它在循环中执行一些操作:static void TaskAction(CancellationToken ct) {while (SomeCondition()){DoSomeSeriousJob();ct.ThrowIfCancellationRequested();} }static void DoSomeSeriousJob() {Console.WriteLine("Serious job started");Thread.Sleep(5000);Console.WriteLine("Serious job done"); }我启动它然后在一段时间后取消:var cts = new CancellationTokenSource();var task = Task.Factory.StartNew(()...

c# – 我应该使用CancellationTokenSource还是CancellationToken来取消.NET中的任务【代码】

我看到CancellationToken和CancellationTokenSource都有IsCancellationRequested getter方法.大多数示例将CancellationToken传递给在Task内执行的方法.它通过使用任何这些来看我,电话可以返回.如果我使用CancellationTokenSource的IsCancellationRequested,它会有问题吗?当我应该抛出异常(通过使用ThrowIfCancellationRequested)或只是从方法返回,如果有取消请求,如下面的代码所示?class Program {//If CancellationToken is pas...

c# – 启动一个任务,等待多次【代码】

在移动应用程序中,我有一个可能很长的异步操作(在异步函数中分组的多个异步网络调用)._myClassField = myClient.DoANumberOfNetworkCallsAsync();我在应用程序启动时执行调用,然后显示启动画面和欢迎屏幕,并且仅在第一次用户交互时显示(例如:按下按钮)我最终等待任务并让用户等待响应未准备好.public async Task<object> GetMyLongAwaitedObjectAsync() {return await _myClassField; }可以多次调用此方法,并且可以同时形成UI和非...

c# – 任务并行库与本机线程同步

这个问题可能是主观的,但我只想知道何时使用TPL以及何时使用基于本机线程的同步(evnts,等待句柄). 本机线程同步技术将在未来过时吗? 谢谢解决方法:尽可能使用TPL,因为它是一种更清晰,更具声明性的方式来表达您对并行性的需求. MSDN解释说“TPL动态地扩展并发度,以最有效地使用所有可用的处理器.此外,TPL处理工作的分区,ThreadPool上的线程调度,取消支持,状态管理等低级细节.通过使用TPL,您可以最大限度地提高代码的性能,同时专注于...

c# – 启动后台任务ASP.NET MVC 4.5【代码】

我在ASP.NET MVC中实现了一个简单的pdf上传器,我需要处理上传的文档.因为处理可能需要一段时间,我希望这可以在后台完成.工作流程是这样的:我希望用户上传文档,当文档保存在数据库中时,他应该能够在网站上做其他事情,包括上传新文档.用户不应该在后台了解有关处理的任何信息. 我的实现看起来像这样:[HttpPost] public async virtual Task<ActionResult> Confirm(string author, string title) {//...previousDocumentIsProcessing...

c# – 为什么不使用同步方法而不是等待异步任务?【代码】

异步方法:public void Main(){await Asynctask1;DoSomething(); }public async Task AsyncTask1(){//Async logic here }同步方法:public void Main(){SyncMethod1();DoSomething(); }我想我在这里遗漏了一些东西.假设SyncMethod1()和Asynctask1()都做同样的事情,这两个构造到底是不是结果相同,即DoSomething()在方法完成之前不会启动?解决方法:namely that DoSomething() doesn’t start until the method before finishes?异步...

c# – 同时执行所有任务并等待完成?【代码】

我有一系列异步方法,我想同时执行.对于它们是否成功执行,这些方法中的每一个都返回true或false.他们的结果也记录在我们的审计跟踪中,以便我们可以诊断问题. 我的一些功能并不依赖于所有这些成功执行的方法,我们完全期望它们中的一些会不时失败.如果它们确实失败了,程序将继续执行,它只会提醒我们的支持人员他们需要纠正问题. 我试图弄清楚所有这些函数同时执行的最佳方法是什么,但是只有在它们全部开始执行之后才让父函数等待它们....