Articles of async await

使用带参数的异步任务方法注册新的pageasynctask

我在asp.net webforms项目中有这个方法: private async Task SomeMethod(int accID){ // } 我想在page_load中执行此操作,但我不确定如何处理参数。 protected void Page_Load(object sender, EventArgs e) { RegisterAsyncTask(new PageAsyncTask(SomeMethod(int accID))); // etc }

Windows Phone 8异步等待使用

我刚刚开始学习WP编程,所以这可能是一个愚蠢的问题…… 我开发的应用程序从一个Web服务获取数据几个不同的方法。 所以我决定将所有这些Web服务提取代码放到一个类中: class WebApiWorker { public async Task<List> GetGeocodeAsync(String address) { String url = “http://api.com&search=” + HttpUtility.UrlEncode(address) + “&format=json”; HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url); httpWebRequest.Method = “GET”; HttpWebResponse response = (HttpWebResponse) await httpWebRequest.GetResponseAsync(); Stream responseStream = response.GetResponseStream(); string data; using (var reader = new System.IO.StreamReader(responseStream)) { data = reader.ReadToEnd(); } responseStream.Close(); var geocodeResponse = JsonConvert.DeserializeObject<List>(data); […]

Microsoft.Bcl.Async中是否存在ExceptionDispatchInfo的模拟?

Microsoft.Bcl.Async中是否存在ExceptionDispatchInfo的模拟? 我找不到类似的东西。 这个问题是由我的另一个问题引发的。 当exception的父task可用时,我可以使用task.GetAwaiter().GetResult()来重新抛出,如@StephenCleary所建议的那样。 当它不可用时,我有哪些选择?

我可以不等待异步任务而不使其异步无效吗?

使用异步任务方法时,需要在方法之前放置等待。 我需要以非UI阻塞方式执行代码,并且不想等待。 我唯一的想法是使用: private void TaskFactory() { CancellationTokenSource token_TaskFactory = new CancellationTokenSource(); ParallelOptions parOpts = new ParallelOptions(); parOpts.CancellationToken = token_TaskFactory.Token; parOpts.MaxDegreeOfParallelism = Environment.ProcessorCount; TaskCreationOptions atp = new TaskCreationOptions(); atp = TaskCreationOptions.PreferFairness; Task TaskFactory = Task.Factory.StartNew(() => { if (!token_TaskFactory.IsCancellationRequested) { Thread.Sleep(5000); } else { } }, token_TaskFactory.Token, atp, TaskScheduler.Default); }

如何让这个递归异步/等待问题正确?

我有一个递归方法访问树层次结构中的每个节点并触发每个节点的回调,如(下面的代码未经过测试和示例): void Visit(Node node, Func callback, CancellationToken ct) { if(ct.IsCancellationRequested) { return; } var processedNode = DoSomeProcessing(node); int result = callback(processedNode); // Do something important with the returned int. … // Recursion. foreach(var childNode in node.Children) { Visit(childNode, callback); } } 上面的方法是从传递回调的异步方法调用的。 由于它长时间运行,我将调用包装成Task.Run() : async Task ProcessAsync(Func callback) { var rootNode = await someWebService.GetNodes(); await […]

将HttpClient .NET 4.5的代码降级到.NET 4.0

我有这个代码在.NET 4.5中运行良好。 var handler = new HttpClientHandler(); handler.UseDefaultCredentials = true; handler.PreAuthenticate = true; handler.ClientCertificateOptions = ClientCertificateOption.Automatic; var client = new HttpClient(handler); client.BaseAddress = new Uri(“http://localhost:22678/”); client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue(“application/json”)); var loginBindingModel = new LoginBindingModel { Password = “test01”, UserName = “test01” }; var response = await client.PostAsJsonAsync(“api/Account/Login”, loginBindingModel); response.EnsureSuccessStatusCode(); // Throw on error code. tokenModel = […]

.NET中的并行抓取

我工作的公司运行着几百个非常动态的网站。 它决定建立一个搜索引擎,我的任务是编写刮刀。 一些站点在旧硬件上运行,不能承受太多惩罚,而其他站点可以处理大量的并发用户。 我需要能够说对站点A使用5个并行请求,对站点B使用2个,对站点C使用1个并行请求。 我知道我可以使用线程,互斥量,信号量等来实现这一目标,但它会非常复杂。 任何更高级别的框架,如TPL,await / async,TPL Dataflow是否足够强大,能够以更简单的方式完成此应用程序?

在Autofac中注册异步工厂

我有一个从存储库中获取的Wallet类。 我正在尝试在Autofac中正确注册,因此使用钱包的类可以注入适当的实例。 问题是存储库使用异步方法(返回Task)。 Autofac是否支持此类案例? 这不起作用: cb.RegisterType() .As() .SingleInstance(); cb.Register(async c => await c.Resolve().CreateAsync(App.WalletPath)); cb.RegisterType() .AsSelf(). .SingleInstance(); 在应用程序的某个地方我只有: class ViewModel { public ViewModel(Wallet wallet) { //nothing fancy here } } 当调用container.Resolve()我得到一个例外,说钱包没有注册。

使用HttpClient进行异步文件下载

我有一个服务,它返回一个csv文件到POST请求。 我想使用异步技术下载所述文件。 虽然我可以获取该文件,但我的代码有几个突出的问题和问题: 1)这真的是异步的吗? 2)有没有办法知道内容的长度,即使它是以分块格式发送的? 想想进度吧)。 3)如何最好地监控进度,以便在所有工作完成之前推迟程序退出。 using System; using System.IO; using System.Net.Http; namespace TestHttpClient2 { class Program { /* * Use Yahoo portal to access quotes for stocks – perform asynchronous operations. */ static string baseUrl = “http://real-chart.finance.yahoo.com/”; static string requestUrlFormat = “/table.csv?s={0}&d=0&e=9&f=2015&g=d&a=4&b=5&c=2000&ignore=.csv”; static void Main(string[] args) { while (true) { Console.Write(“Enter a symbol […]

标记仅使用条件属性返回任务的异步方法?

System.Diagnostics.ConditionalAttribute对于分割调试代码片段非常有用,无需使用编译器指令,但它只与返回void方法兼容。 有没有办法为返回Task异步方法使用它(或等效的东西)?