Tag: 异步

HttpWebRequest.BeginGetResponse

我需要向Web资源发出异步请求并使用此页面中的示例( 链接到完整示例 ): HttpWebRequest myHttpWebRequest= (HttpWebRequest)WebRequest.Create(“http://www.contoso.com”); RequestState myRequestState = new RequestState(); myRequestState.request = myHttpWebRequest; // Start the asynchronous request. IAsyncResult result= (IAsyncResult) myHttpWebRequest.BeginGetResponse(new AsyncCallback(RespCallback),myRequestState); 但是当我测试应用程序时,执行冻结(在2-3秒内)在此代码的最后一行(我可以使用调试器观察它)。 为什么? 这是我的错误还是函数的标准行为?

在模拟时调用异步WCF服务

我在服务器上运行WCF服务,该服务器配置为接受Kerberos身份validation。 Kerberos工作正常,因此WCF服务知道哪个用户连接到他。 该服务提供一切作为异步方法。 就像这里一样(只是一个清晰的例子)。 public ExampleService : IExampleService { public Task GetUsernameAsync() { return await Task.Run(() => System.Threading.Thread.CurrentPrincipal.Name); } } 在客户端,我有一个Controller(它是一个MVC页面,但这没关系),它调用方法异步。 public ExampleController { public async Task Index() { using(var serviceClient = ServiceFactory.GetServiceClient()) using(Security.Impersonation.Impersonate()) { var data = await serviceClient.GetUsernameAsync(); return View(data); } } } 只要我不使用等待,模仿就可以正常工作。 由于Task不会模拟模拟身份,因此我想知道是否有可能更改Task的执行用户或执行任何其他操作以使模拟在此用例中起作用。 我尝试了一个自定义的awaiter(因为它可以在那个案例中使用Culture),但这根本不起作用(好吧它也不会冒充)。

来自UI线程中的Async组件的Fire事件

我正在.Net 2.0中构建一个非可视组件。 该组件使用异步套接字(BeginReceive,EndReceive等)。 异步回调在运行时创建的工作线程的上下文中调用。 组件用户不必担心multithreading(这是主要目标,我想要的) 组件用户可以在任何线程中创建我的非可视组件(UI线程只是简单应用程序的通用线程。更严重的应用程序可以在任意工作线程中创建组件)。 组件触发事件,例如“SessionConnected”或“DataAvailable”。 问题:由于Async Callbacks和其中引发的事件,事件处理程序在工作线程上下文中执行。 我想使用一个中间层,它强制事件处理程序在首先创建组件的线程的上下文中执行。 示例代码(从exception处理等中删除…) /// /// Occurs when the connection is ended /// /// The IAsyncResult to read the information from private void EndConnect(IAsyncResult ar) { // pass connection status with event this.Socket.EndConnect(ar); this.Stream = new NetworkStream(this.Socket); // — FIRE CONNECTED EVENT HERE — // Setup Receive Callback […]

使用ExecuteNonQueryAsync和Reporting Progress

我以为我试图做一些非常简单的事情。 我只想在屏幕上报告一个正在运行的号码,以便用户知道我正在执行的SQL存储过程正在运行,并且他们不会感到不耐烦并开始点击按钮。 问题是我无法弄清楚如何实际调用ExecutNonQueryAsync命令的进度报告器。 它停留在我的报告循环中并且从不执​​行命令但是,如果我把它放在async命令之后,它将被执行并且结果永远不会等于零。 任何想法,评论,想法将不胜感激。 非常感谢! int i = 0; lblProcessing.Text = “Transactions ” + i.ToString(); int result = 0; while (result==0) { i++; if (i % 500 == 0) { lblProcessing.Text = “Transactions ” + i.ToString(); lblProcessing.Refresh(); } } // Yes – I know – the code never gets here – that is the […]

哪个.NET版本的C#5异步function

用户必须在其计算机上安装哪个版本的.NET才能让开发人员在C#5中使用更新的异步function?

异步保存数据库或在.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。 请建议。 谢谢

我应该永远不会调用HostingEnvironment.UnregisterObject吗?

在尝试在我的ASP.Net MVC 3应用程序中通过smtp实现异步电子邮件时,我遇到了阻止我的ASP.NET MVC请求线程的SO SmtpClient.SendAsync 。 在那里我找到了Phil Haack的文章: 在ASP.NET中实现重复背景任务的危险,它提供了一种避免在AppDomain关闭时崩溃后台线程的方法。 文章说要调用HostingEnvironment.RegisterObject(this); 在构造函数上并调用HostingEnvironment.UnregisterObject(this); 仅在调用IRegisteredObject.Stop方法时 。 在一般情况下,当请求永久到达,并且实现IRegisteredObject的对象的范围是请求时,这种方法是不是在每个请求中注册对象(利用电子邮件function)并且不注销任何? 可以吗? 或者我应该在异步操作完成后取消注册? PS:正如Damian Edwards在链接的SO问题中所建议的,我使用ThreadPool.QueueUserWorkItem来发送超出请求范围的电子邮件。

为什么即使我尝试从工作器更改UI,同步上下文也为null,为什么工作人员在UI线程上等待,即使我不这样做?

我点击一个表单上的按钮,我称之为FooAsync并在完成时阻止UI线程。 以下是代码和我的问题。 using System; using System.Diagnostics; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace SynContextIfIDontTouchUIInWorkerThread { public partial class Form1 : Form { public Form1() { InitializeComponent(); } #pragma warning disable 1998 private async void button1_Click(object sender, EventArgs e) { // Nicely prints out the WindowsForms.SynchronizationContext // because we *are* indeed on the UI thread this.Text […]

如何处理异步函数中的返回值

在处理使用异步rest调用的数据API时(我使用的是RestSharp.Portable),处理返回值的最佳方法是什么? 由于异步函数只能返回任务或任务…但调用者无法返回返回值… API如何将数据返回给调用者? 全球物业? 从我到目前为止所看到的,似乎回调函数是与Response Data交互的唯一方法? 以下面的方法为例; 以前我没有使用异步Rest库并且能够返回一个值但是在将其转换为使用RestSharp.Portable后,我没有看到返回值的方法: public async Task GetEntityDescriptor(string entityType) { TaskCompletionSource tcs = new TaskCompletionSource(); var req = new RestRequest(“/qcbin/rest/domains/{domain}/projects/{project}/customization/entities/{entityType}”); AddDomainAndProject(req); req.AddParameter(“entityType”, entityType, ParameterType.UrlSegment); client.ExecuteAsync(req, (res) => { if (res.ResponseStatus == ResponseStatus.Error) { tcs.TrySetException(res.ErrorException); } else { tcs.SetResult(res.Data); } } ); return tcs.Task; } 我所能做的就是返回Task,但是调用者仍无法获取响应数据,或者我错过了一些明显的东西? 调用者是否可以订阅在Task.Completed等处被触发的事件? 我对这个异步概念非常模糊。 是否有编写可移植数据API的示例?

使用语句中的异步方法

注意:我在Unity中使用C#,这意味着.NET 3.5版本,所以我不能使用await或async关键字.. 当我在其中放入一个异步工作的方法时, 使用语句会发生什么? using (WebClient wc = new WebClient()) { wc.DownloadFileAsync(urlUri, outputFile); } SomeMethod1(); SomeMethod2(); 如您所知,在调用DownloadFileAsync()方法之后,将调用SomeMethod1() ,它不在using块中,而DownloadFileAsync()仍然有效 。 所以现在我真的很困惑在这种情况下使用语句和异步方法会发生什么。 是否会在正确的时间调用wc Dispose()而没有任何问题? 如果没有,我该如何更正此示例?