Board index » Web Programming » Start 20 Threads, stop them all after 10 seconds
|
jjwassermann
|
|
jjwassermann
|
Start 20 Threads, stop them all after 10 seconds
Web Programming236
Hi I was wondering if someone could help me with the syntax for some VB.Net ASPX code to: - Start 20 threads - End all threads after the sooner of 10 seconds or if all of the threads themselves have finished. BTW, each thread checks an email address for validity with www.aspnetmx.com. If it is taking too long (e.g.>10 seconds) I just want to look at the results for the threads that have finished. TIA Mark - |
| Cor
Registered User |
Sat Jun 18 01:00:59 CDT 2005
Re:Start 20 Threads, stop them all after 10 seconds
Mark,
The most simple way is to set them first in an array and than to abort them using a timer in your main program. (I doubt if it really will work.) As I understand it well, does this mean that if you have 100 sessions active, that than you have 2000 threads active in your system. Now I see even less purpose of your threading. (Probably your processor time is eaten by the processing of those threads) However just my thought of course. Cor - |
| m
Registered User |
Sat Jun 18 12:27:00 CDT 2005
Re:Start 20 Threads, stop them all after 10 seconds
well in my opinion a asynchrone started dellegate would be a much cleaner
solution in this situation just my 2 cents Michel Posseth [MCP] "Mark B" <mbrownlee@Delete-All-X-XorbisofXXt.com>schreef in bericht QuoteHi - |
| Mark
Registered User |
Sun Jun 19 19:09:35 CDT 2005
Re:Start 20 Threads, stop them all after 10 seconds
Thanks. OK then, here's the code I could use:
'********CODE START*************** Dim intResult(20) as Integer = 1 Dim i as Integer 'intResult(i) 1 = Not Finished, 2 = True , 3 =False For i = 1 To 20 '*******Start thread (i) here If Mx.Validate(Session("Email"+Format$(i,"00")))=True Then 'This tests the particular email address intResult(i)= 2 Else intResult(i)= 3 End If ' *********End thread (i)i here Next i '********CODE END*************** Can someone help me with the threading syntax I should use above where it says: '*******Start thread i here and ' *********End thread i here and also the main engine code to shut down the threads after 10 seconds. Then the 20 session variables can be inspected to see which ones passed, failed and timed-out. TIA Mark P.S. "As I understand it well, does this mean that if you have 100 sessions active, that than you have 2000 threads active in your system." True, but the threads are only active for 10 seconds per session. We can see how it goes. "Cor Ligthert" <notmyfirstname@planet.nl>wrote in message QuoteMark, - |
| Jay
Registered User |
Mon Jun 20 09:16:33 CDT 2005
Re:Start 20 Threads, stop them all after 10 seconds
Mark,
In addition to the other comments: Directly creating threads can be costly, rather then use New Thread, I would recommend using either the ThreadPool, creating your own thread pool, or using an async delegate. The following MSDN Magazine article shows one method of creating a timed method. msdn.microsoft.com/msdnmag/issues/05/07/NETMatters/default.aspx">msdn.microsoft.com/msdnmag/issues/05/07/NETMatters/default.aspx Depending on how you call www.aspnetmx.com, for example if its a Web Service wouldn't it be easier to simply set the WebClientProtocol.Timeout property to your timeout amount (10 seconds)? http://msdn.microsoft.com/library/default.asp?url" rel="nofollow" target="_blank">msdn.microsoft.com/library/default.asp=/library/en-us/cpref/html/frlrfsystemwebservicesprotocolswebclientprotocolclasstimeouttopic.asp Something like: '********CODE START*************** ' set the method timeout on the proxy to 10 seconds Mx.Timeout = CInt(TimeSpan.FromSeconds(10).TotalMilliseconds) Dim intResult(20) as Integer = 1 Dim i as Integer 'intResult(i) 1 = Not Finished, 2 = True , 3 =False For i = 1 To 20 '*******Start thread (i) here If Mx.Validate(Session("Email"+Format$(i,"00")))=True Then 'This tests the particular email address intResult(i)= 2 Else intResult(i)= 3 End If ' *********End thread (i)i here Next i '********CODE END*************** Also, depending on how may total requests I had coming in, I would consider doing these 20 outgoing requests asynchronously. Something like (syntax checked only): Mx.Timeout = CInt(TimeSpan.FromSeconds(10).TotalMilliseconds) Dim intResults(20 - 1) As Integer Dim results(20 - 1) As IAsyncResult ' Queue up all the requests For index As Integer = 0 To 20 - 1 intResults(index) = 1 results(index) = Mx.BeginValidate(Session("Email"+Format$(i,"00)), nothing, nothing) Next index ' wait for each request to finish For index As Integer = 0 To 20 - 1 If Mx.EndValidate(results(index)) Then 'This tests the particular email address intResults(index)= 2 Else intResults(index)= 3 End If Next NOTE: You may need the Mx.EndValidate in a Try/Catch as the Timeout will cause an exception to be raised... The advantage of using BeginValidate is that all 20 validates are executing concurrently... Hope this helps Jay "Mark B" <mbrownlee@Delete-All-X-XorbisofXXt.com>wrote in message | Hi | | I was wondering if someone could help me with the syntax for some VB.Net | ASPX code to: | | - Start 20 threads | - End all threads after the sooner of 10 seconds or if all of the threads | themselves have finished. | | BTW, each thread checks an email address for validity with www.aspnetmx.com. | If it is taking too long (e.g.>10 seconds) I just want to look at the | results for the threads that have finished. | | TIA | Mark | | | | | - |
| Mark
Registered User |
Tue Jun 21 00:53:24 CDT 2005
Re:Start 20 Threads, stop them all after 10 seconds
Thanks very much.
I haven't really programmed much in VB.Net before just VBA. I couldn't find the method "BeginValidate" or "EndValidate" in the ASPNetMX documentation at www.aspnetmx.com/help/default.htm.">www.aspnetmx.com/help/default.htm. Where does it come from? Also, excuse my .Net ignorance but does "asynchronously" mean at the same time? And, is "For index As Integer = 0 To 20 - 1" the same as: Dim index as Integer For index = 0 To 19 "Jay B. Harlow [MVP - Outlook]" <Jay_Harlow_MVP@msn.com>wrote in message QuoteMark, - |
| Kevin
Registered User |
Tue Jun 21 07:00:20 CDT 2005
Re:Start 20 Threads, stop them all after 10 seconds
Did you read my reply from last week? I spent a long time covering this. I
recommended that you do not use multiple threads. Perhaps that isn't what you wanted to hear, but I gave you quite a few good reasons not to. -- HTH, Kevin Spencer Microsoft MVP .Net Developer Ambiguity has a certain quality to it. "Mark B" <mbrownlee@Delete-All-X-XorbisofXXt.com>wrote in message QuoteThanks very much. - |
| Jay
Registered User |
Tue Jun 21 10:33:53 CDT 2005
Re:Start 20 Threads, stop them all after 10 seconds
Mark,
| I couldn't find the method "BeginValidate" or "EndValidate" in the ASPNetMX | documentation at www.aspnetmx.com/help/default.htm.">www.aspnetmx.com/help/default.htm. Where does it | come from? "BeginValidate" or "EndValidate" are based on ASPNetMX being a Web Service, ASPNetMX is not a web service, ergo they don't exist per se. You should be able to use an asynchronous delegate with ASPNetMX. http://msdn.microsoft.com/library/default.asp?url" rel="nofollow" target="_blank">msdn.microsoft.com/library/default.asp=/library/en-us/cpguide/html/cpovrasynchronousdelegates.asp | Also, excuse my .Net ignorance but does "asynchronously" mean at the same | time? Yes. For details on asynchronous programming see: http://msdn.microsoft.com/library/default.asp?url" rel="nofollow" target="_blank">msdn.microsoft.com/library/default.asp=/library/en-us/cpguide/html/cpconasynchronousprogramming.asp | And, is "For index As Integer = 0 To 20 - 1" the same as: | | Dim index as Integer | For index = 0 To 19 Yes | I haven't really programmed much in VB.Net before just VBA. Looking at www.aspnetmx.com/help/default.htm,">www.aspnetmx.com/help/default.htm, I would consider using ValidateQty instead of Validate, as ValidateQty does a list of addresses. Then I would not worry about getting multi-threading & asynchronous programming to work. As Kevin suggests multi-threading is something to consider not using, as it is a very advanced topic that is easy to make things worse then better, although I have not specifically read Kevin's response... Asynchronous programming ("BeginValidate" or "EndValidate") are generally easier, however even then you need to be very careful as its still multi-threaded programming. Hope this helps Jay "Mark B" <mbrownlee@Delete-All-X-XorbisofXXt.com>wrote in message | Thanks very much. | | I haven't really programmed much in VB.Net before just VBA. | | I couldn't find the method "BeginValidate" or "EndValidate" in the ASPNetMX | documentation at www.aspnetmx.com/help/default.htm.">www.aspnetmx.com/help/default.htm. Where does it | come from? | | Also, excuse my .Net ignorance but does "asynchronously" mean at the same | time? | | And, is "For index As Integer = 0 To 20 - 1" the same as: | | Dim index as Integer | For index = 0 To 19 | | | | "Jay B. Harlow [MVP - Outlook]" <Jay_Harlow_MVP@msn.com>wrote in message | news:uSaVuKadFHA.1384@TK2MSFTNGP09.phx.gbl... |>Mark, |>In addition to the other comments: |> |>Directly creating threads can be costly, rather then use New Thread, I | would |>recommend using either the ThreadPool, creating your own thread pool, or |>using an async delegate. |> |>The following MSDN Magazine article shows one method of creating a timed |>method. |> |>msdn.microsoft.com/msdnmag/issues/05/07/NETMatters/default.aspx">msdn.microsoft.com/msdnmag/issues/05/07/NETMatters/default.aspx |> |> |>Depending on how you call www.aspnetmx.com, for example if its a Web | Service |>wouldn't it be easier to simply set the WebClientProtocol.Timeout property |>to your timeout amount (10 seconds)? |> |> | http://msdn.microsoft.com/library/default.asp?url" rel="nofollow" target="_blank">msdn.microsoft.com/library/default.asp=/library/en-us/cpref/html/frlrfsystemwebservicesprotocolswebclientprotocolclasstimeouttopic.asp |> |>Something like: |> |>'********CODE START*************** |> |>' set the method timeout on the proxy to 10 seconds |>Mx.Timeout = CInt(TimeSpan.FromSeconds(10).TotalMilliseconds) |> |> |>Dim intResult(20) as Integer = 1 |>Dim i as Integer |>'intResult(i) 1 = Not Finished, 2 = True , 3 =False |> |>For i = 1 To 20 |> |>'*******Start thread (i) here |>If Mx.Validate(Session("Email"+Format$(i,"00")))=True Then |>'This tests the particular email address |>intResult(i)= 2 |>Else |>intResult(i)= 3 |>End If |>' *********End thread (i)i here |> |>Next i |> |>'********CODE END*************** |> |>Also, depending on how may total requests I had coming in, I would | consider |>doing these 20 outgoing requests asynchronously. |> |>Something like (syntax checked only): |> |>Mx.Timeout = CInt(TimeSpan.FromSeconds(10).TotalMilliseconds) |> |>Dim intResults(20 - 1) As Integer |> |>Dim results(20 - 1) As IAsyncResult |> |>' Queue up all the requests |>For index As Integer = 0 To 20 - 1 |> |>intResults(index) = 1 |>results(index) = |>Mx.BeginValidate(Session("Email"+Format$(i,"00)), nothing, nothing) |> |>Next index |> |>' wait for each request to finish |>For index As Integer = 0 To 20 - 1 |>If Mx.EndValidate(results(index)) Then |>'This tests the particular email address |>intResults(index)= 2 |>Else |>intResults(index)= 3 |>End If |>Next |> |>NOTE: You may need the Mx.EndValidate in a Try/Catch as the Timeout will |>cause an exception to be raised... |> |>The advantage of using BeginValidate is that all 20 validates are | executing |>concurrently... |> |>Hope this helps |>Jay |> |>"Mark B" <mbrownlee@Delete-All-X-XorbisofXXt.com>wrote in message |>news:erh00Y6cFHA.2688@TK2MSFTNGP14.phx.gbl... |>| Hi |>| |>| I was wondering if someone could help me with the syntax for some VB.Net |>| ASPX code to: |>| |>| - Start 20 threads |>| - End all threads after the sooner of 10 seconds or if all of the | threads |>| themselves have finished. |>| |>| BTW, each thread checks an email address for validity with |>www.aspnetmx.com. |>| If it is taking too long (e.g.>10 seconds) I just want to look at the |>| results for the threads that have finished. |>| |>| TIA |>| Mark |>| |>| |>| |>| |>| |> |> |> | | - |
