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

c# – 将Task实例传递给任务的委托【代码】

我有一个长期运行的任务,它使用回调来递增地提供数据(而不是最后一个ContinueWith()回调). 我希望能够在此回调中传递Task对象以进行任务识别(使用Task.CurrentId) 但是,我无法弄清楚如何将Task对象传递给任务委托.似乎没有超载来执行此操作,并且我无法使用闭包来执行此操作,因为此时未定义任务对象. 例如.public Task StartDoingSomeStuff(CallbackDelegate callback) {Task task = Task.Factory.StartNew(() =>{while(whatever){v...

c# – 只需要’最新’任务 – 取消/忽略的最佳做法?【代码】

我的任务看起来像这样:var task = Task.Factory.StartNew <object>(LongMethod); task.ContinueWith(TaskCallback, TaskScheduler.FromCurrentSynchronizationContext());LongMethod调用一个长期运行的服务,在此期间我不能(或者至少不认为我可以),不断轮询取消令牌以查看它是否已被取消.但是,我有兴趣’取消’或忽略回调方法. 当调用TaskCallback时,我只对’结果’感兴趣,如果它来自最近的任务(让我们假设LongMethod调用的服务保留...

c# – 任务并行库的不同用法【代码】

我看到很少有人使用如下语法调用函数:Parallel.Invoke(() => Method1(yourString1),() => Method2(youString2));很少有人写代码如下:Task myFirstTask = Task.Factory.StartNew(() => Method1(5)); Task mySecondTask = Task.Factory.StartNew(() => Method2("Hello"));所以我的问题是当一个人应该使用Parallel.Invoke()并且当一个人应该创建Task类的实例并调用StartNew()方法时. Parallel.Invoke()看起来很方便.那么使用Task cl...

c# – ASP.NET MVC / Azure平台上的cron作业样式任务的最佳实践?

每天,我都希望通过电子邮件发送所有已注册但尚未完成特定任务的用户. 在.NET MVC / Windows Azure平台上解决此问题的最佳框架是什么? 来自OS / Linux世界我会写一个程序并安排它每天通过crontab运行.解决方法:至少对于调度部分,你可以看看不久前宣布的Windows Azure Scheduler Service.使用此服务,您将能够调用HTTP / HTTPS Web端点,以便在计划的时间间隔内将消息写入队列. 要发送电子邮件,您仍然需要编写程序.您可以将此程序作为...

c# – 为什么Window.ShowDialog在TaskScheduler任务中没有阻塞?【代码】

我正在使用自定义TaskScheduler来串行执行任务队列.任务应该显示一个窗口,然后阻止,直到窗口自行关闭.不幸的是,调用Window.ShowDialog()似乎没有阻塞,因此任务完成,窗口永远不会显示. 如果我在调用ShowDialog之后放置一个断点,我可以看到表单已经打开但是在正常执行下,Task似乎很快就会结束你无法看到它. 我的TaskScheduler实现取自上一个问题:public sealed class StaTaskScheduler : TaskScheduler, IDisposable {private reado...

c# – 管理ASP.NET Web窗体中长时间运行任务的策略【代码】

我们有一些逻辑来为我们的ASP.NET Web窗体应用程序计算每个用户的昂贵价值.目前它位于每个页面上的Page_Load标头用户控件中,如下所示://note that we are not awaiting this Task.Factory.StartNew(() => CacheManager.GetExpensiveValue(UserId));然后在静态CacheManager.GetExpensiveValue(int userID)中:private static object locker = new object();lock (locker) {if (!AlreadyDone(userID)){var expensiveValue = ReallyE...

c# – 无法使任务“等待”【代码】

我正在尝试在我的web api包装器中编写一个方法.我想使用“async / await”功能,以便UI不会被阻止.下面是web api包装器中的代码片段.public static async Task Get<T>(Dictionary<string, string> paramDictionary, string controller){try{string absoluteUrl = BaseUrl + controller + "?";absoluteUrl = paramDictionary.Aggregate(absoluteUrl,(current, keyValuePair) => current + (keyValuePair.Key + "=" + keyValuePair.Va...

c# – 如何使用线程处理许多任务【代码】

我有单独处理’很多(可能> 100,000)记录的C#要求.顺序运行此过程被证明是非常慢的,每个记录花费大约一秒钟左右完成(超时错误设置为5秒). 我想通过使用一定数量的工人’线程’尝试异步运行这些任务(我谨慎地使用术语’线程’,因为我不确定我是否应该查看线程,或任务或其他事情) . 我查看了ThreadPool,但我无法想象它可以排队所需的请求量.我理想的伪代码看起来像这样……public void ProcessRecords() {SetMaxNumberOfThreads(20);M...

c# – 在关闭表单之前等待任务完成【代码】

如何使FormClosing事件处理程序(在UI线程上执行)等待在同一表单上调用的任务完成?private void Form1_FormClosing(object sender, FormClosingEventArgs e){cancelUpdater.Cancel(); // CancellationTokenSourceif (!updater.IsCompleted){this.Hide();updater.Wait(); // deadlock if updater task is inside invoke}}private void Form1_Shown(object sender, EventArgs e){cancelUpdater = new CancellationTokenSource();upda...

c# – 如何覆盖返回任务的函数【代码】

我有以下几点:public override Task<SignInStatus> PasswordSignInAsync(string userName, string password, bool isPersistent, bool shouldLockout) {return base.PasswordSignInAsync(userName, password, isPersistent, shouldLockout); }我想将其修改为以下内容:public override Task<SignInStatus> PasswordSignInAsync(string userName, string password, bool isPersistent, bool shouldLockout) {var result = base.Pas...

c# – MVC – 并行任务中的System.Threading.ThreadAbortException【代码】

在我的MVC应用程序中,超级管理员可以设置任务队列,例如更新数据库.因此,当管理员向队列添加更新时,控制器会启动在后台运行的新任务.但是,当您添加一些任务时,应用程序将抛出System.Threading.ThreadAbortException:线程正在中止.此外,堆栈跟踪表明它发生在代码中的不同行. 我还应该补充说,任务使用EF6实体来使用sql-server,并且根据堆栈跟踪,它在数据库上执行操作之后或同时发生.由于更新通常很大,我使用db.Configuration.AutoDet...

c# – 取消所有异步任务【代码】

是否可以在不知道当前正在运行的内容的情况下取消所有异步方法? 例如,我有几个可以运行异步任务的类:class Class1 {public async void SomeTask(){for (int i = 0; i < 5; i++){// Doing some jobawait Task.Delay(2000);}} }class Class2 {public async void ContinuouslyTask(){for (;;){// Doing some job on backgroundawait Task.Delay(1000);}} }我要在注销之前关闭每个异步任务:class Program {static void Main(string[...

c# – 等待异步任务函数和在void函数中调用await之间有什么区别?【代码】

要了解这个问题,请查看await调用和以下示例的函数InitSyncContext()的定义. 基于此我想知道程序将如何在每个场景中表现,因为我不完全理解调用等待InitSyncContext(存储)和在没有返回任务的情况下进行await调用之间的区别. 作为参考我之前做了一个研究,我发现了一个类似的example here,但我认为它在我的情况下是不同的. *以下代码是现实世界代码的简化示例,仅用于演示目的.void Main() {Initializer(); }private async void Initial...

c# – 使用Reactive Extensions重试异步任务代码【代码】

在我的数据访问类中包含以下代码.public async Task<IEnumerable<TEntity>> QueryAsync(string sql, object param = null,CommandType commandType = CommandType.Text, int? commandTimeout = null, IDbTransaction transaction = null){using (var connection = Connection){var tokenSource = GetCancellationTokenSource(commandTimeout ?? CommandTimeoutDefault);Task<IEnumerable<TEntity>> queryTask =connection.QueryAsy...

c# – Webapi2 – 在一个任务完成后从控制器操作返回,但继续进一步的异步处理【代码】

我有一个关于Webapi2的问题 我的应用程序是完全异步/等待,但我想优化最后一部分.我很难找到,所以有什么办法可以做到以下几点吗? webapi2控制器的一个示例:private async Task<Foo> Barfoo(Bar foo){//some async function} public async Task<IHttpActionResult> Foo(Bar bar){List<Task> tasks=new List<Task>();var actualresult=Barfoo(bar.Bar);tasks.Add(actualresult);foreach(var foobar in bar.Foo){//some stuff wh...