Tag: 异步

EF6 ToListAsync不会运行异步但会阻塞该线程

为了提高我的页面性能,我想异步运行一些查询。 我升级到EF6,因为它通过公开异步方法本机支持此function。 我无法同时触发查询,所以我将我的代码简化为这个简单的例子: var sw = new Stopwatch(); sw.Start(); var dummy = context.Set().Take(200).ToListAsync(); sw.Stop(); Logger.Debug(“attempt nr 1 : ” + sw.ElapsedMilliseconds); var result = await dummy; 我的例外是秒表因为我正在等待稍后等待而立即停止。 然而,我的记录器表示秒表已经传递了5000毫秒,这意味着调用是同步而非异步执行的。 任何人都知道为什么或我可能做错了什么?

AsyncWaitHandle.WaitOne阻止CLR线程吗? 或者它是否创建了I / O完成端口?

我有这个问题, AsyncWaitHandle.WaitOne阻止了CLR线程吗? 或者它是否创建了I / O完成端口? 例如,当我运行我的应用程序时,我启动一个初始化某些数据的任务’A’,当新请求到达时,我希望它们等到’A’结束,所以我可以做一个IAsyncResult.AsyncWaitHandle.WaitOne ,但是。 ..它是否阻止调用线程直到’A’结束或者它是否创建了一个I / O完成端口,当’A’完成时也会通知它。 如果没有,有没有办法做到这一点? 问候。

如何尽快有效地制作1000个Web请求

我需要从C#控制台应用程序中制作100,000个轻量级(即小内容长度)Web请求。 我能做到这一点的最快方法是什么(即在最短的时间内完成了所有请求)以及我应该遵循哪些最佳实践? 我无法解雇,因为我需要捕捉回应。 据推测,我想要使用async Web请求方法,但是我想知道存储所有Task延续和编组的开销会产生什么影响。 内存消耗不是一个整体关注,目标是速度。 据推测,我也想利用所有可用的核心。 所以我可以这样做: Parallel.ForEach(iterations, i => { var response = await MakeRequest(i); // do thing with response }); 但这不会让我比我的核心数更快…… 我可以: Parallel.ForEach(iterations, i => { var response = MakeRequest(i); response.GetAwaiter().OnCompleted(() => { // do thing with response }); }); 但是如何让我的程序在ForEach之后运行。 坚持所有的Tasks和WhenAll他们感到臃肿时,是否有任何现有的模式或帮助者拥有某种任务队列? 有没有办法让它变得更好,我该如何处理限制/错误检测? 例如,如果远程端点响应缓慢,我不想继续发送垃圾邮件 我明白我还需要这样做: ServicePointManager.DefaultConnectionLimit = int.MaxValue 有什么必要吗?

MVVM和构造函数注入中的后台加载

我有一个问题,关于在WPF .NET 4.0中使用ViewModel加载大量数据的方式和位置(所以没有async / await:/)。 这是我的ViewModel: public class PersonsViewModel : ViewModelBase { private readonly IRepository _personRepository; private IEnumerable _persons; public IEnumerable Persons { get { return _persons; } private set { _persons = value; OnPropertyChanged(“Persons”); } } public PersonsViewModel(IRepository personRepository) { if (personRepository == null) throw new ArgumentNullException(“personRepository”); _personRepository = personRepository; } } 这个ViewModel用在Window中,我需要在Window打开时加载所有人。 我想到了很多解决方案,但我无法确定哪个是最好的(或者可能有更好的方法)。 […]

返回LINQ时的c#异步

我刚刚意识到这段代码: public async Task<List> GetTitleReviews(int titleID) { using (var context = new exampleEntities()) { return await context.Reviews.Where(x => x.Title_Id == titleID).ToList(); } } …将无法工作,因为异步方法无法等待LINQ表达式。 我做了一些搜索,但只找到了一些过于复杂的解决方案。 如何将返回LINQ表达式的函数转换为异步版本?

是否可以同步调用异步调用?

我已经在我想要做的事情下面放了一些非常基本的代码。 我有’DoSomethingAshnc’方法执行异步操作。 我希望’DoSomething’方法是一个不接受action参数并返回int的同步方法。 public void DoSomething(Action actionToPerformOnComplete) { DoSomethingAsync(delegate(int val) { actionToPerformOnComplete(val); }); } 是否甚至可以让’DoSomething’返回一个整数,就像方法同步发生一样?

可以异步/等待了解Android活动生命周期吗?

我一直想知道使用async / await在Android上生成响应式UI。 我一直在使用一个简单的发布/子包装服务围绕异步函数(这是很多样板,但工作)但我有这个痒在我身边,告诉我应该有一个更好的方法。 对包装器服务的需求源于android上的活动在配置更改(设备轮换,语言更改……)上被“回收”(销毁和重新创建)这一事实,因此,如果我触发异步function,则可能会生成await回调被破坏的活动和各种各样的坏事可能源于此。 异步后端是否可以知道代码应该在不同的对象(新创建的活动)中启动,而不需要编译器黑暗魔法? 理由 :使用Xamarin在iOS和Android之间共享代码都很容易,直到你遇到这个问题。 如果以某种方式解决/实现,我看到两个平台之间的共同控制器的潜力。 编辑:我决定用事件总线(TinyMessenger)解决这个问题,同时我理解@Servy提出的SynchronizationContext解决方案

异步方法混淆

我试图绕过异步方法,我想知道以下两种方法之间的区别。 public Task Add(Tenant tenant) { DbContext.Tenants.Add(tenant); return DbContext.SaveChangesAsync(); } public async Task Add(Tenant tenant) { DbContext.Tenants.Add(tenant); await DbContext.SaveChangesAsync(); }

同时运行x个Web请求

我们公司有一个Web服务,我想通过我自己的C#中的HTTPWebRequest客户端发送XML文件(存储在我的驱动器上)。 这已经有效了。 Web服务同时支持5个同步请求(一旦服务器上的处理完成,我就从Web服务获得响应)。 每个请求处理大约需要5分钟。 投掷太多请求(> 5)会导致我的客户超时。 此外,这可能导致服务器端的错误和不连贯的数据。 在服务器端进行更改不是一个选项(来自不同的供应商)。 现在,我的Webrequest客户端将发送XML并使用Webrequest等待响应result.AsyncWaitHandle.WaitOne(); 但是,这样,虽然Web服务支持5,但是一次只能处理一个请求。我尝试使用Backgroundworker和Threadpool但是它们同时创建了太多请求,这使得它们对我没用。 有什么建议,怎么可以解决这个问题? 用5个线程创建我自己的Threadpool ? 有什么建议,如何实现呢?

使用任务的经典永无止境的线程循环?

给定是一种非常常见的线程场景: 宣言 private Thread _thread; private bool _isRunning = false; 开始 _thread = new Thread(() => NeverEndingProc()); thread.Start(); 方法 private void NeverEndingProc() { while(_isRunning) { do(); } } 可能在异步tcp侦听器中使用,它等待回调,直到它通过让线程用完而停止( _isRunning = false )。 现在我想知道:是否有可能与Task做同样的事情? 使用CancellationToken ? 或者仅针对预期结束和报告状态的程序的Task ?