Tag: async await

SaveChangesAsync不更新数据库表中的值

这是我的表: 统计数据 Id,Depth,RefreshCounter 样本记录: Id Depth RefreshCounter 1 1 1 2 1 0 3 1 0 4 1 0 现在我需要做的是每当我刷新页面时,我需要在深度为1的数据库表中将此refreshcounter值增加1 。 我在加载浏览页面时调用此方法: @Html.Action(“IncrementRefreshcounter”, “Statistics”, new { id = 1}) //for eg:1,2,3,4 这是我的代码,它执行此操作: [ChildActionOnly] public ActionResult IncrementRefreshcounter(int id) { using ( var context = new MyDBContext()) { //at each page refresh i would be passing different […]

异步保存数据库或在.net c中并行保存记录#

我有一项服务,我必须在从API获取后将大量记录保存到数据库。 同时我必须将这些记录从服务返回给调用者。 但问题是我在DB中保存记录需要很长时间,因此服务变慢。 我搜索了这个并发现了一些并行任务或异步等待的概念。 我是这个概念的新手,并且对它的使用感到困惑 我调查了一下: 运行多个C#任务异步 http://msdn.microsoft.com/en-us/library/hh191443.aspx 但我不知道该怎么做。请帮助我: 下面是代码: public List SearchItems(string ItemToSearch, string AuthenticationToken) { var _list= getRecords from Api //100 records //Task.Factory.StartNew(() => _objBLLNutritionLog.FillNutritionTable(_tempList)); // also tried this saveToDb(_list); // need to run this asynchronously Or parallel (Taking long time) return _list; } 我想将结果返回给调用者,另一方面想要填充db。 请建议。 谢谢

快速有效地下载多个文件(异步)

我有这么多文件,我必须下载。 所以我尝试使用新的异步function,如下所示。 var streamTasks = urls.Select(async url => (await WebRequest.CreateHttp(url).GetResponseAsync()).GetResponseStream()).ToList(); var streams = await Task.WhenAll(streamTasks); foreach (var stream in streams) { using (var fileStream = new FileStream(“blabla”, FileMode.Create)) { await stream.CopyToAsync(fileStream); } } 我担心这段代码会导致大量内存使用,因为如果有1000个文件包含2MB文件,那么这段代码会将1000 * 2MB流加载到内存中? 我可能会遗漏一些东西,或者我完全正确。 如果我没有错过任何东西,那么最好等待每个请求和消费流是最好的方法吗?

实现C#方法返回F#中的Task

我在F#中创建了一个inheritance自C#类的类型,该类公开了一个在C#中返回Task的方法。 我正在尝试找出在F#中做到这一点的最佳方式 说我的C#看起来像这样: public class Foo { public TextWriter Out { get { return Console.Out; } } public virtual Task DoStuff() { return Task.FromResult(SomeEnum.Foo); } } public enum SomeEnum { Foo, Bar } 我在F#中inheritance该类型的第一步看起来像这样: type Bar() = inherits Foo() override this.DoStuff() = this.Out.WriteLineAsync(“hey from F#”) |> ignore System.Threading.Task.FromResult(SomeEnum.Bar) 但是a)它不觉得它实际上是异步的并且b)它只是感觉不是-F#。 那么我将如何inheritanceFoo类并实现期望返回Task的DoStuff方法?

Task.WhenAll()和foreach(任务中的var任务)之间的区别是什么

经过几个小时的挣扎,我在我的应用程序中发现了一个错误。 我认为下面的两个函数具有相同的行为,但事实certificate它们没有。 任何人都可以告诉我幕后真的发生了什么,以及他们为什么会以不同的方式行事? public async Task MyFunction1(IEnumerable tasks){ await Task.WhenAll(tasks); Console.WriteLine(“all done”); // happens AFTER all tasks are finished } public async Task MyFunction2(IEnumerable tasks){ foreach(var task in tasks){ await task; } Console.WriteLine(“all done”); // happens BEFORE all tasks are finished }

更改我的服务器端WebAPI以获得async / await的好处

试图了解服务器端的异步/等待使用。 我的理解是它只在释放线程时才有用。 如果我有: [HttpGet] public async Task<IEnumerable> Get() { return await Task<IEnumerable>.Run(() => DoThingsAndGetResults()); } IEnumerable DoThingsAndGetResults() { // …Do some CPU computations here… IEnumerable result = myDb.table.Select().ToList(); // entity framework // …Do some CPU computations here… return result; } 线程会被释放吗? 在这种情况下Async / Await是无用的吗? 从async / await获益的唯一方法是,如果我做了一些更大的更改并执行此操作: [HttpGet] public async Task<IEnumerable> Get() { return await […]

是否可以将异步事件处理程序附加到System.Timers.Timer?

我已经在这里阅读了SOpost和文章这里我有一个计时器事件,每隔一段时间触发一次,我想在处理程序内部进行一些异步处理,所以有类似的事情: Timer timer = new Timer(); timer.Interval = 1000; timer.Elapsed += timer_Elapsed; // Please ignore this line. But some answers already given based on this line so I will leave it as it is. timer.Elapsed += async (sender, arguments) => await timer_Elapsed(sender, arguments); private async Task timer_Elapsed(object sender, ElapsedEventArgs e) { await Task.Delay(10); } 上面的代码编译和工作。 […]

如果没有标记为异步,Task.Delay是如何等待的?

我正在看Task.Delay(int)反编译的Task.Delay(int) : // System.Threading.Tasks.Task [__DynamicallyInvokable] public static Task Delay(int millisecondsDelay) { return Task.Delay(millisecondsDelay, default(CancellationToken)); } 使用此方法就像await Task.Delay(5000); ,intellisense甚至说“(等待)”: 那么如何将Task.Delay(int)标记为async ( public static async Task Delay(int millisecondsDelay) )?

HttpContent.ReadAsStringAsync导致请求挂起(或其他奇怪的行为)

我们正在构建一个高度并发的Web应用程序,最近我们已经开始广泛使用异步编程(使用TPL和async / await )。 我们有一个分布式环境,应用程序通过REST API(构建在ASP.NET Web API之上)相互通信。 在一个特定的应用程序中,我们有一个DelegatingHandler ,在调用base.SendAsync (即,在计算响应之后)将响应记录到文件中。 我们在日志中包含响应的基本信息(状态代码,标题和内容): public static string SerializeResponse(HttpResponseMessage response) { var builder = new StringBuilder(); var content = ReadContentAsString(response.Content); builder.AppendFormat(“HTTP/{0} {1:d} {1}”, response.Version.ToString(2), response.StatusCode); builder.AppendLine(); builder.Append(response.Headers); if (!string.IsNullOrWhiteSpace(content)) { builder.Append(response.Content.Headers); builder.AppendLine(); builder.AppendLine(Beautified(content)); } return builder.ToString(); } private static string ReadContentAsString(HttpContent content) { return content == null ? […]

等待Task.CompletedTask什么?

我使用在Build2017中引入的Windows Template Studio创建了UWP应用程序。 下面的类是它生成的代码的一部分。 public class SampleModelService { public async Task<IEnumerable> GetDataAsync() { await Task.CompletedTask; // <– what is this for? var data = new List(); data.Add(new SampleModel { Title = “Lorem ipsum dolor sit 1”, Description = “Lorem ipsum dolor sit amet”, Symbol = Symbol.Globe }); data.Add(new SampleModel { Title = “Lorem ipsum dolor […]