Tag: 异步

MongoDB C#驱动程序2.0:如何从MapReduceAsync获取结果

MongoDB C#驱动程序2.0:如何从MapReduceAsync获取结果 我正在使用MongoDB版本3,C#驱动程序2.0,并将获得MapReduceAsync方法的结果。 我有这个集合“用户”: { “_id” : 1, “firstName” : “Rich”, “age” : “18” } { “_id” : 2, “firstName” : “Rob”, “age” : “25” } { “_id” : 3, “firstName” : “Sarah”, “age” : “12” } VisualStudio中的代码: var map = new BsonJavaScript( @” var map = function() { emit(NumberInt(1), this.age); };”); var reduce = […]

.NET 4.0中.NET 4.5的Task.FromResult()等效

我无法找到有关将我的代码从.NET 4.5重定向到4.0的信息。 我必须在Windows XP上安装此应用程序。 我在.NET 4.5中的代码 public async Task ImportFile(string fileToImport) { … return await Task.FromResult(Sheet1) } 在.NET 4.0方法中,FromResult不存在。 有人知道它应该在.NET 4.0中看起来怎么样?

如何停止调用导致IAsyncOperation?

在我的应用程序中,我通知多个设备 如果设备无法访问且几秒钟内没有响应,我想取消呼叫。 我的代码是: await characteristic0.WriteClientCharacteristicConfigurationDescriptorAsync (GattClientCharacteristicConfigurationDescriptorValue.Notify); 经过一些研究后我发现通常可以传递CancelationToken(_ct)并执行此操作: 首先创建一个包含调用的操作: IAsyncOperation operation = characteristic0.WriteClientCharacteristicConfigurationDescriptorAsync (GattClientCharacteristicConfigurationDescriptorValue.Notify); 然后使用CancellationToken创建任务: Task task = operation.AsTask(_ct); 然后等待它: GattCommunicationStatus status = await task; 现在,即使CancellationToken的IsCancellationRequested -Property设置为true,也是如此。 电话不会停止。 并且,设备在第一行之后已经通知 ! 是不是应该在await之后发生? 我是否在使用令牌时犯了错误,或者这是一个更大的问题? 编辑 在与@Andrii Litvinov交谈之后,我将更多代码添加到我对问题的初步描述中。 这是整个方法: public async Task NotifyDevice(DeviceInformationDisplay deviceInfo, CancellationToken _ct) { try { BluetoothLEDevice device = await BluetoothLEDevice.FromIdAsync(deviceInfo.Id); service = device.GetGattService(new Guid(Service_UUID)); characteristic0 […]

你如何在C#中运行同步计时器?

我正在编写一个应用程序,它使用计时器在某些事件发生时在屏幕上显示倒计时。 我想重用计时器,因为它对应用程序中的一些东西很方便,所以我指定了我想要围绕计时器的单词。 例如,以下函数调用: CountdownTimer(90, “You have “, ” until the computer reboots”); 会显示: You have 1 minute 30 seconds until the computer reboots 然后倒计时。 我使用以下代码: private void CountdownTimer(int Duration, string Prefix, string Suffix) { Countdown = new DispatcherTimer(); Countdown.Tick += new EventHandler(Countdown_Tick); Countdown.Interval = new TimeSpan(0, 0, 1); CountdownTime = Duration; CountdownPrefix = Prefix; CountdownSuffix […]

ASP.NET WebMethod在长时间运行的SQL过程中持有线程池线程

我有一个报告页面,可以从数据库表中构建报告。 报告以表格格式显示。 为了处理用户交互,我构建了一个JQuery表插件,允许用户使用自定义排序,过滤和分页来自定义报表。 JQuery插件使用一组ajax请求来使用数据填充表。 这些ajax请求调用asp.net(c#)webMethods,后者又使用一组类来构建SQL并执行Query。 构建的查询在与WebMethod相同的线程中运行,这会导致问题,因为SQL可能需要超过30秒才能返回。 我一直在阅读有关启动新线程和异步方法的内容。 我的问题是我显然不希望从ASP.NET池中保存一个线程来执行SQL的整个过程,因为它只等待I / O. 是否可以在等待SQL Server的响应时将线程返回到线程池? 可以使用Begin和End ADO.net命令实现吗? 我问的原因是目前这不是一个问题,但随着使用此系统的用户数量的增加,所有为新用户服务的线程池将会运行这些长查询。

SharePoint 2013异步事件处理程序同步执行(在wpw3而不是owstimer下)

我使用Visual Studio 2013为ItemAdded和ItemUpdated事件创建了一个自定义列表事件处理程序。 我完全期望那些在OWSTIMER.EXE下执行,因为我不想为W3wp.exe添加负载,因为我需要在ER执行的操作会相当繁重。 但是,在调试模式下,我注意到它只会通过附加到W3wp.exe来命中我的Breakpoints 。 我甚至将事件接收器配置为在XML是异步的,期望这会迫使它们在OWSTimer下运行但没有运气。 我强烈怀疑这从SP2010变为SP2013 。 你们能否对此有所了解? 有谁知道同步和异步事件是否在SP2013 w3wp下执行? 提前致谢, 马丁。

.Net(C#)异步x并行性能

.Net对异步和并行编程很有帮助。 有一些关于这方面的好文章 但什么是最好的和在哪种情况下? 我刚刚创建了一个简单的控制台应用程序来试图找出答案。 它看起来像异步和等待更快,但它消耗更多的内存。 这是在同一台机器上重复测试三次的平均结果(CPU = AMD FX 8120八核处理器3,1GHz和RAM = 16GB): 异步经过时间= 23,0841498667 | 记忆(MB)= 62154 平行经过时间= 107,9682892667 | 记忆(MB)= 27828 代码在GitHub中 ,非常简单。 该代码请求网页250次。 异步测试是: public async static Task AsynchronousTest() { List<Task> taskList = new List<Task>(); for (int i = 0; i < TOTAL_REQUEST; i++) { Task taskGetHtmlAsync = GetHtmlAsync(i); taskList.Add(taskGetHtmlAsync); } await Task.WhenAll(taskList); […]

在Async方法中绑定到输出blob时,将Blob绑定到IAsyncCollector时出错

我试图在这篇文章之后绑定到Async方法中的blob输出: 如何将输出值绑定到我的异步Azure函数? 我有多个输出绑定,所以只返回不是一个选项 public static async Task Run(HttpRequestMessage req, IAsyncCollector collection, TraceWriter log) { if (req.Method == HttpMethod.Post) { string jsonContent = await req.Content.ReadAsStringAsync(); // Save to blob await collection.AddAsync(jsonContent); return req.CreateResponse(HttpStatusCode.OK); } else { return req.CreateResponse(HttpStatusCode.BadRequest); } } 我对blob的绑定是: { “bindings”: [ { “authLevel”: “function”, “name”: “req”, “type”: “httpTrigger”, “direction”: “in” }, { “name”: […]

如何检查我是否已连接?

ALL,我正在编写一个需要与服务器进行异步阻塞连接的应用程序。 我有一个带有按钮的GUI表单和一个与BeginConnect / EndConnect对执行连接的类。 该实现遵循此 MSDN示例。 但是,在回调方法中抛出了exception。这就是我要避免的。 我想要的是检查是否已建立连接,以及它是否在GUI表单上将相应的错误吐出为文本。 我试图检查BeginConnect()的返回值,但它在调用静态方法之前返回。 我尝试重新抛出exception并在建立连接(按钮单击事件)时捕获它,但它不起作用。 没有抓住例外。 如何检查是否已建立连接? 我可以将我的文本控件传递给连接类,并在捕获exception时将文本设置为错误,但还有其他方法吗? 谢谢。 [编辑] class InternetConnector { public void ConnectToHost() { IPEndPoint ip = new IPEndPoint(IPAddress.Parse(connector_host), connector_port); client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); client.Blocking = true; client.BeginConnect(ip, new AsyncCallback(ConnectCallback), client); } private static void ConnectCallback(IAsyncResult ar) { try { Socket sock = (Socket)ar.AsyncState; sock.EndConnect(ar); […]

如何使用不允许异步控制器操作的CMS处理异步API调用?

我一直在使用async / await,而且我所阅读的大多数内容都是“不要阻止异步代码” ,但控制台应用程序中的main函数除外。 我发现自己无法遵循这个简单的规则:( 我的应用程序在很大程度上取决于WebAPI层。 我在MVC应用程序中使用的客户端使用System.Net.Http.HttpClient上的async方法来调用API方法。 目前我正在以两种方式处理它。 在某些地方,我们在调用客户端后立即获得结果: //WebAPI Client public object GetSomething(int id) { var task = _client_GetSomethingFromApiAsync(id); var result = task.Result; return result; } 在其他人使用async一直到控制器。 我正在使用SiteFinity,不能使用异步控制器操作,所以我最终得到这样的东西: //WebAPI Client public Task GetSomethingAsync(int id) { return _client_GetSomethingFromApiAsync(id); } //Domain Service public Task GetSomethingDomainServiceAsync(int id) { return _service.GetSomethingAsync(id); } //Controller public JsonResult GetSomethingControllerAction(int id) { […]