Vb.net .NET线程不是独立的吗?
我有一个sub,它获取视频文件的持续时间Vb.net .NET线程不是独立的吗?,vb.net,multithreading,asynchronous,async-await,nreco,Vb.net,Multithreading,Asynchronous,Async Await,Nreco,我有一个sub,它获取视频文件的持续时间 Async Sub GetDuration(folder As String) Dim ffP As New FFProbe Dim vInfo As MediaInfo Dim totalSecs As Double = Await Task.Run(Function() vInfo = ffP.GetMediaInfo(filep)
Async Sub GetDuration(folder As String)
Dim ffP As New FFProbe
Dim vInfo As MediaInfo
Dim totalSecs As Double = Await Task.Run(Function()
vInfo = ffP.GetMediaInfo(filep)
If vInfo.Duration.TotalSeconds < 10
Thread.Sleep(20000)
End If
Return vInfo.Duration.TotalSeconds
End Function)
异步子GetDuration(文件夹为字符串)
将ffP调暗为新ffP探头
Dim vInfo作为MediaInfo
Dim totalSecs As Double=等待任务.Run(函数()
vInfo=ffP.GetMediaInfo(filep)
如果vInfo.Duration.TotalSeconds<10
线程。睡眠(20000)
如果结束
返回vInfo.Duration.TotalSeconds
终端功能)
当我在一个短视频(不到10秒)上运行它时,它会使应用程序休眠20秒,正如预期的那样。然而,在浏览器的另一个选项卡上,我在一个长视频(大于10秒)上运行它,而第一个线程仍在睡眠…但它也在睡眠,直到20秒过期/过去。所以两个标签都处于休眠状态,这向我表明它们实际上是同一个线程。当使用异步/等待对时,VB.NET不应该创建单独的线程吗
其主要思想是让它们分别运行,这样多个用户可以彼此独立地获取持续时间。异步和等待模式不是多线程。使用相同的线程,但该线程中的进程以某种方式进行调度,以使线程不被锁定。在VS中,您可以检查调试期间运行的线程。尝试执行
wait Task.Delay(TimeSpan.FromSeconds(20.0))
而不是Thread.Sleep(20000)
。这就是ASP.Net?如果是这样,并且您处于使用会话状态,那么同一会话中的请求将被序列化,即来自第二个选项卡的请求将由IIS排队,直到第一个选项卡完成。Thnx。那么,我如何让它创建单独的线程呢?(想法是让它们分别运行,这样多个用户可以获得持续时间)多个用户将处于不同的会话中,因此这不应该是一个问题。要测试而不是使用第二个选项卡,请使用新的专用浏览窗口或不同的浏览器&看看是否发生了相同的情况。请看这个问题:Thnx。那么,我如何让它创建单独的线程呢?(想法是让它们分别运行,这样多个用户可以获得持续时间)我不是VB专家,但.net支持并行操作。应该有一个VB等价物: