- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在通过异步发出 http get 请求来验证图像 url。下面的代码一切正常,但是当我有这么多图像时,我们的防火墙将阻止我的互联网访问,因为有这么多线程同时请求。因此,我一直在寻找一种解决方案,如何限制并发运行的线程数。我最终得到了这个 thread告诉我使用 SemaphoreSlim但我不知何故无法理解这个想法以及如何实现这一点?
Dim tasks = myImages.Select(Function(x) testUrl_async(x))
Dim results = Await Task.WhenAll(tasks)
Async Function testUrl_async(ByVal myImage As image) As Task(Of image)
Dim myImageurl as string=myImage.imageurl
myHttpResponse = Await myHttpClient.GetAsync(myImageurl)
If myHttpResponse.IsSuccessStatusCode Then
Return myImage
Else
Return Nothing
End If
End Function
最佳答案
our firewall will block my internet access because of so many threads concurrently requesting. Therefore I was looking for a solution how to restrict the count of concurrently running threads.
is that SemaphoreSlim wait or waitAsnyc (what is the difference anyway?)
Wait
是同步等待 - 它阻塞调用线程。
WaitAsync
是一个异步等待 - 它释放调用线程并在信号量可用时恢复执行当前方法。
should be inside a foreach while adding tasks? Can I just create the task list with linq as I do in my code?
why is there used task.Run?
Task.Run
这里当然不需要或不需要。
after which line is executed does the thread start? after task.run or task.whenall?
Task.Run
,该委托(delegate)立即排队到线程池。但正如我上面所说,你不想使用
Task.Run
(它也不应该在原始答案中使用)。
Private _mutex As New SemaphoreSlim(20)
Async Function testUrl_async(myImage As image) As Task(Of image)
Await _mutex.WaitAsync()
Try
Dim myImageurl = myImage.imageurl
Dim myHttpResponse = Await myHttpClient.GetAsync(myImageurl)
Return If(myHttpResponse.IsSuccessStatusCode, myImage, Nothing)
Finally
_mutex.Release()
End Try
End Function
关于vb.net - 使用 "Task.WhenAll"时如何控制线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31027885/
我是一名优秀的程序员,十分优秀!