Board index » Web Programming » Start 20 Threads, stop them all after 10 seconds

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


-
 

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





-

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

Quote
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















-

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

Quote
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









-

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

|

|

|

|

|







-

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

Quote
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

|

|

|

|

|











-

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

Quote
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

>|

>|

>|

>|

>|

>

>

>









-

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

|>|

|>|

|>|

|>|

|>|

|>

|>

|>

|

|





-