草庐IT

Asynchronous

全部标签

c# - 如何限制并发异步 I/O 操作的数量?

//let'ssaythereisalistof1000+URLsstring[]urls={"http://google.com","http://yahoo.com",...};//nowlet'ssendHTTPrequeststoeachoftheseURLsinparallelurls.AsParallel().ForAll(async(url)=>{varclient=newHttpClient();varhtml=awaitclient.GetStringAsync(url);});这就是问题所在,它同时启动了1000多个Web请求。有没有一种简单的方法来限制这些异步ht

c# - 如何限制并发异步 I/O 操作的数量?

//let'ssaythereisalistof1000+URLsstring[]urls={"http://google.com","http://yahoo.com",...};//nowlet'ssendHTTPrequeststoeachoftheseURLsinparallelurls.AsParallel().ForAll(async(url)=>{varclient=newHttpClient();varhtml=awaitclient.GetStringAsync(url);});这就是问题所在,它同时启动了1000多个Web请求。有没有一种简单的方法来限制这些异步ht

c# - 如何在c#中异步调用任何方法

谁能给我看一小段代码,演示如何在C#中异步调用方法? 最佳答案 如果你使用action.BeginInvoke(),你havetocallEndInvoke某处-否则框架必须在堆上保存异步调用的结果,从而导致内存泄漏。如果您不想使用async/await关键字跳转到C#5,您可以只使用.Net4中的TaskParallels库。它比使用BeginInvoke/EndInvoke好得多,并且提供了一种简洁的方法异步作业即发即弃:usingSystem.Threading.Tasks;...voidFoo(){}...newTask(F

c# - 如何在c#中异步调用任何方法

谁能给我看一小段代码,演示如何在C#中异步调用方法? 最佳答案 如果你使用action.BeginInvoke(),你havetocallEndInvoke某处-否则框架必须在堆上保存异步调用的结果,从而导致内存泄漏。如果您不想使用async/await关键字跳转到C#5,您可以只使用.Net4中的TaskParallels库。它比使用BeginInvoke/EndInvoke好得多,并且提供了一种简洁的方法异步作业即发即弃:usingSystem.Threading.Tasks;...voidFoo(){}...newTask(F

c# - 等待与 task.Result 相同的已完成任务?

我目前正在阅读StephenCleary撰写的“C#Cookbook中的并发性”,我注意到以下技术:varcompletedTask=awaitTask.WhenAny(downloadTask,timeoutTask);if(completedTask==timeoutTask)returnnull;returnawaitdownloadTask;downloadTask是对httpclient.GetStringAsync的调用,timeoutTask正在执行Task.Delay。如果没有超时,则downloadTask已经完成。鉴于任务已经完成,为什么有必要进行第二次等待而不是返

c# - 等待与 task.Result 相同的已完成任务?

我目前正在阅读StephenCleary撰写的“C#Cookbook中的并发性”,我注意到以下技术:varcompletedTask=awaitTask.WhenAny(downloadTask,timeoutTask);if(completedTask==timeoutTask)returnnull;returnawaitdownloadTask;downloadTask是对httpclient.GetStringAsync的调用,timeoutTask正在执行Task.Delay。如果没有超时,则downloadTask已经完成。鉴于任务已经完成,为什么有必要进行第二次等待而不是返

c# - .NET 中 yield 和 await 如何实现控制流?

据我了解yield关键字,如果从迭代器block内部使用,它会将控制流返回给调用代码,并且当再次调用迭代器时,它会从中断的地方开始.此外,await不仅等待被调用者,而且还会将控制权返回给调用者,仅在调用者等待方法时从中断处继续。换句话说--thereisnothread,而async和await的“并发”是巧妙的控制流造成的错觉,语法隐藏了细节。现在,我以前是一名汇编程序员,我非常熟悉指令指针、堆栈等,并且我了解正常的控制流(子例程、递归、循环、分支)是如何工作的。但是这些新结构——我不明白。当到达await时,运行时如何知道接下来应该执行哪一段代码?它怎么知道什么时候可以从中断的地

c# - .NET 中 yield 和 await 如何实现控制流?

据我了解yield关键字,如果从迭代器block内部使用,它会将控制流返回给调用代码,并且当再次调用迭代器时,它会从中断的地方开始.此外,await不仅等待被调用者,而且还会将控制权返回给调用者,仅在调用者等待方法时从中断处继续。换句话说--thereisnothread,而async和await的“并发”是巧妙的控制流造成的错觉,语法隐藏了细节。现在,我以前是一名汇编程序员,我非常熟悉指令指针、堆栈等,并且我了解正常的控制流(子例程、递归、循环、分支)是如何工作的。但是这些新结构——我不明白。当到达await时,运行时如何知道接下来应该执行哪一段代码?它怎么知道什么时候可以从中断的地

c# - 我应该避免使用 'async void' 事件处理程序吗?

我知道使用即发即弃asyncvoid方法来启动任务通常被认为是一个坏主意,因为没有待处理任务的跟踪并且处理异常很棘手可能会被抛入这样的方法中。我通常也应该避免使用asyncvoid事件处理程序吗?例如,privateasyncvoidForm_Load(objectsender,System.EventArgse){awaitTask.Delay(2000);//doasyncwork//...}我可以这样重写:TaskonFormLoadTask=null;//trackthetask,canimplementcancellationprivatevoidForm_Load(obje

c# - 我应该避免使用 'async void' 事件处理程序吗?

我知道使用即发即弃asyncvoid方法来启动任务通常被认为是一个坏主意,因为没有待处理任务的跟踪并且处理异常很棘手可能会被抛入这样的方法中。我通常也应该避免使用asyncvoid事件处理程序吗?例如,privateasyncvoidForm_Load(objectsender,System.EventArgse){awaitTask.Delay(2000);//doasyncwork//...}我可以这样重写:TaskonFormLoadTask=null;//trackthetask,canimplementcancellationprivatevoidForm_Load(obje