Tag: async await

PagedList和Async

我在我的视图中使用了PagedList,但我的脚手架控制器是使用这种默认的索引操作生成的: public async Task Index() { return View(await db.Claimants.ToListAsync()); } 我没有找到PagedList的扩展名来使用async 。 我的方法必须改为这样的forms: public ActionResult Index(int? page) { var claimants = db.Claimants.OrderBy(b => b.Name); var notNullPage = page ?? 1; return View(claimants.ToPagedList(notNullPage, 50)); } 是否有合理的方式使用PagedList和async ?

如何在此父方法中等待没有异步修饰符的异步方法?

我有一个方法,我想等待,但我不想导致多米诺骨牌效应,认为任何可以调用此调用方法并等待它。 例如,我有这个方法: public bool Save(string data) { int rowsAffected = await UpdateDataAsync(data); return rowsAffected > 0; } 我打电话给: public Task UpdateDataAsync() { return Task.Run(() => { return Data.Update(); //return an integer of rowsAffected } } 这将无法工作,因为我必须在Save()的方法签名中放入“async”然后我不能返回bool我必须使它成为Task但我不希望任何人等待Save()方法。 有没有办法可以暂停代码执行,如等待或以某种方式等待没有async修饰符的代码?

与等待继续的ContinueWith(delegate,CancellationToken)的等效

我有这种情况: private Task LongRunningTask = /* Something */; private void DoSomethingMore(Task previousTask) { } public Task IndependentlyCancelableSuccessorTask(CancellationToken cancellationToken) { return LongRunningTask.ContinueWith(DoSomethingMore, cancellationToken); } 特别是,我在这里感兴趣的行为在MSDN的关于Continuation Tasks的页面中详细说明如下: 在这些情况下,延续进入“ Canceled状态: […] 当继续传递时, System.Threading.CancellationToken作为参数传递,并且在继续运行之前,令牌的IsCancellationRequested属性为true 。 在这种情况下,延续不会启动并转换为Canceled状态。 上面的代码有效。 但是,我正在将尽可能多的继续转换为使用await关键字。 是否存在使用await的等效项,允许在等待任务完成之前取消继续?

MessageQueue和Async / Await

我只想以异步方式接收我的消息! 它冻结了我的UI public async void ProcessMessages() { MessageQueue MyMessageQueue = new MessageQueue(@”.\private$\MyTransactionalQueue”); MyMessageQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) }); while (true) { MessageQueueTransaction MessageQueueTransaction = new MessageQueueTransaction(); MessageQueueTransaction.Begin(); ContainError = false; ProcessPanel.SetWaiting(); string Body = MyMessageQueue.Receive(MessageQueueTransaction).Body.ToString(); //Do some process with body string. MessageQueueTransaction.Commit(); } } 我只是像任何常规方法一样调用方法,并且它的工作正常! 当我使用BackgroundWorkers而不是async / await时,此代码曾经工作 想法?

如何将.net 4.5 Async / Await示例转换回4.0

等效的asp.net mvc 4.0代码是什么样的? using System.Net; using System.Net.Http; using System.Web.Mvc; using System.Threading.Tasks; using Newtonsoft.Json; namespace Web.Controllers { public class HomeController : Controller { private HttpClient httpClient = new HttpClient(); private static dynamic shots; public async Task Index() { if (shots == null) { try { var responseMessage = await httpClient.GetAsync (“http://api.dribbble.com/shots/everyone?per_page=30”); responseMessage.EnsureSuccessStatusCode(); var value = await […]

Microsoft.Bcl.Async如何工作?

Microsoft.Bcl.Async使开发人员能够使用async/await关键字,而不使用.NET Framework 4.5,他们应该使用这些关键字来使用它们。 这很棒,这得益于Microsoft CLR和语言团队中人员的辛勤工作。 现在我很好奇这是如何工作的。 async/await要求编译器做一些繁重的工作来将代码变成可以等待操作的东西。 编译器最初在.NET Framework 4.0下抛出编译错误,即使它清楚地知道async/await是什么意思(Visual Studio 2012/2013。) 那么这个库如何告诉编译器不要抛出与异步操作相关的特定编译错误,并且像在.NET Framework 4.5下一样解除一些代码?

Async等待如何使用返回值

我有一个我从另一个开发人员inheritance的Windows服务,它运行速度非常慢,并且对eBay API有很多慢速调用。 我希望在没有太多重构的情况下加快速度。 我刚刚开始考虑使用c#async / await尝试使用这些慢速调用来运行异步。 这是我想要实现的目标: 我有一个非常繁忙的方法,可以进行如下调整: getProducts getCategories getVehicles getImages 我的想法是我可以简单地将方法更改为async并将Task添加到返回类型,如下所示: public async Task ProcessAdditionalProductDetialsAsync(ItemType oItem) { String additionalProductDetails = string.Empty; if (oItem.ItemSpecifics.Count > 0) { foreach (NameValueListType nvl in oItem.ItemSpecifics) { if (nvl.Value.Count > 0) { foreach (string s in nvl.Value) { additionalProductDetails += “” + nvl.Name + “: ” + s + […]

Task.WaitAll不等待任务完成

在试图弄清楚新的时候(也许现在不是那么新,但对我而言是新的)C#中的Task异步编程,我遇到了一个问题,让我有点想弄清楚,我不知道为什么。 我已经解决了这个问题,但我仍然不确定为什么这是一个问题。 我以为我会分享我的经验,以防任何人遇到同样的情况。 如果有任何大师想告诉我这个问题的原因,那就太棒了,非常感激。 我总是喜欢知道为什么有些东西不起作用! 我做了一个测试任务,如下: Random rng = new Random((int)DateTime.UtcNow.Ticks); int delay = rng.Next(1500, 15000); Task<Task> testTask = Task.Factory.StartNew<Task>( async (obj) => { DateTime startTime = DateTime.Now; Console.WriteLine(“{0} – Starting test task with delay of {1}ms.”, DateTime.Now.ToString(“h:mm:ss.ffff”), (int)obj); await Task.Delay((int)obj); Console.WriteLine(“{0} – Test task finished after {1}ms.”, DateTime.Now.ToString(“h:mm:ss.ffff”), (DateTime.Now – startTime).TotalMilliseconds); return obj; }, […]

await task.run vs await c#

我在网上搜索并看到很多关于task.run和等待异步的问题,但是有一个特定的使用场景,我并不是真的理解它们的区别。 我相信情景非常简单。 await Task.Run(() => LongProcess()); VS await LongProcess()); 其中LongProcess是一个异步方法,其中包含一些异步调用,例如调用db并等待ExecuteReaderAsync()。 题: 这种情况下两者之间有什么区别吗? 任何帮助或输入赞赏,谢谢!

等待最后一个方法行

还在学习async-await。 我碰到了类似以下的例子: public async Task MethodAsync() { await Method01Async(); await Method02Async(); } 最后等待的目的是什么? Method02Async是MethodAsync方法的最后一行。 所以没有任何方法余数 – 下面没有任何行 – 在编译器生成的回调中没有任何东西要调用…我错过了什么吗?