473,850 Members | 2,082 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

best way to wait for async delegate calls to complete

Hi,
I've omitted a large chunk of the code for clarity but the loop below is how
I'm calling a delegate function asynchronously. After I start the each call
I'm incrementing a counter and then making the main thread sleep until the
counter gets back to zero. The call back function for each call decrements
the counter. Is there a better way to make the thread wait until all calls
are complete besides using the counter? I've seen some things with using an
IAsyncResult but I'm not sure how to do that in my case since I'm making 1
to n calls.
Thanks,
Ryan

For iProviderIndex As Int32 = 0 To oProviders.Leng th - 1
oLookupReq = New Schema.LookupRe quest
oLookup =
CType(Activator .CreateInstance (Type.GetType(o LookupType.clas s_id)),
Schema.IPrequal Lookup)
Del = New LookupAsyncDele gate(AddressOf oLookup.GetPreq ualResponse)
Del.BeginInvoke (oLookupReq, AddressOf LookupCallback, Del)
IncrementAsyncO ps()
Next iProviderIndex

While m_async_ops > 0
Thread.Sleep(20 0)
End While
Nov 21 '05 #1
11 6985
well there are always other aproaches , your solution has the big advantage
of simplicity
another aproach could be to write your todo code in a class , start these on
another thread and keep track of them with a queue class

if i think a litle more i know for sure that i can find other constructions
to get the job done , however your aproach isn`t so bad at all
and has the big advantage in my opinion that it is clear in what it does

IAsyncResult will give you a value back from the method , i do not see how
this could help in this situation

regards

Michel Posseth [MCP]


"ryan" <ro************ *@inval.hotmail .com> schreef in bericht
news:eI******** ******@TK2MSFTN GP09.phx.gbl...
Hi,
I've omitted a large chunk of the code for clarity but the loop below is
how I'm calling a delegate function asynchronously. After I start the each
call I'm incrementing a counter and then making the main thread sleep
until the counter gets back to zero. The call back function for each call
decrements the counter. Is there a better way to make the thread wait
until all calls are complete besides using the counter? I've seen some
things with using an IAsyncResult but I'm not sure how to do that in my
case since I'm making 1 to n calls.
Thanks,
Ryan

For iProviderIndex As Int32 = 0 To oProviders.Leng th - 1
oLookupReq = New Schema.LookupRe quest
oLookup =
CType(Activator .CreateInstance (Type.GetType(o LookupType.clas s_id)),
Schema.IPrequal Lookup)
Del = New LookupAsyncDele gate(AddressOf oLookup.GetPreq ualResponse)
Del.BeginInvoke (oLookupReq, AddressOf LookupCallback, Del)
IncrementAsyncO ps()
Next iProviderIndex

While m_async_ops > 0
Thread.Sleep(20 0)
End While

Nov 21 '05 #2
Ryan,

You could use the ManualResetEven t class. Create a ManualResetEven t
before the loop. Have the LookupCallback method signal the event by
calling the Set method when the m_async_ops counter gets down to 0.
After the loop wait for the event by calling the WaitOne method. I
recommend setting the m_async_ops counter's initial value to the number
of delegates your are going to invoke before the loop though.
Otherwise, you may get strange results if you're not careful.

Also, the code you've posted is not thread-safe. The while loop
checking to see if m_async_ops is > 0 may never end. The reason is
because that thread may not be seeing the changes other threads are
making. You need to have some synchronization mechanism in place to at
least do a volatile read of m_async_ops.

Brian

ryan wrote:
Hi,
I've omitted a large chunk of the code for clarity but the loop below is how
I'm calling a delegate function asynchronously. After I start the each call
I'm incrementing a counter and then making the main thread sleep until the
counter gets back to zero. The call back function for each call decrements
the counter. Is there a better way to make the thread wait until all calls
are complete besides using the counter? I've seen some things with using an
IAsyncResult but I'm not sure how to do that in my case since I'm making 1
to n calls.
Thanks,
Ryan

For iProviderIndex As Int32 = 0 To oProviders.Leng th - 1
oLookupReq = New Schema.LookupRe quest
oLookup =
CType(Activator .CreateInstance (Type.GetType(o LookupType.clas s_id)),
Schema.IPrequal Lookup)
Del = New LookupAsyncDele gate(AddressOf oLookup.GetPreq ualResponse)
Del.BeginInvoke (oLookupReq, AddressOf LookupCallback, Del)
IncrementAsyncO ps()
Next iProviderIndex

While m_async_ops > 0
Thread.Sleep(20 0)
End While


Nov 21 '05 #3
Ryan,
In addition to the other comments:

I would store the IAsyncResult values returned from BeginInvoke in a list,
that I then did a For Each over doing an EndInvoke on each one in turn.

Something like:

Public Delegate Sub DoSomething()

Public Shared Sub Something()
System.Threadin g.Thread.Sleep( TimeSpan.FromSe conds(0.5))
End Sub

Public Shared Sub Main()
Dim method As DoSomething = AddressOf Something
Dim results As New ArrayList

For index As Integer = 1 To 100
Dim result As IAsyncResult = method.BeginInv oke(Nothing,
Nothing)
results.Add(res ult)
Next

For Each result As IAsyncResult In results
Try
method.EndInvok e(result)
Catch ex As Exception
' report the error but keep going...
Debug.WriteLine (ex, "End Invoke")
End Try
Next

End Sub

This allows the main thread to quietly wait until all the workers are
finished. Because the workers are finishing asynchronously the EndInvoke
will either return really quickly for completed workers or wait for busy
workers...

Note depending on the method called, you may want to store the Delegate
itself (the method variable) in the list also or as the AsyncState on the
BeginInvoke call...

--
Jay [MVP - Outlook]
..NET Application Architect, Enthusiast, & Evangelist
T.S. Bradley - http://www.tsbradley.net
"ryan" <ro************ *@inval.hotmail .com> wrote in message
news:eI******** ******@TK2MSFTN GP09.phx.gbl...
| Hi,
| I've omitted a large chunk of the code for clarity but the loop below is
how
| I'm calling a delegate function asynchronously. After I start the each
call
| I'm incrementing a counter and then making the main thread sleep until the
| counter gets back to zero. The call back function for each call decrements
| the counter. Is there a better way to make the thread wait until all calls
| are complete besides using the counter? I've seen some things with using
an
| IAsyncResult but I'm not sure how to do that in my case since I'm making 1
| to n calls.
| Thanks,
| Ryan
|
| For iProviderIndex As Int32 = 0 To oProviders.Leng th - 1
| oLookupReq = New Schema.LookupRe quest
| oLookup =
| CType(Activator .CreateInstance (Type.GetType(o LookupType.clas s_id)),
| Schema.IPrequal Lookup)
| Del = New LookupAsyncDele gate(AddressOf oLookup.GetPreq ualResponse)
| Del.BeginInvoke (oLookupReq, AddressOf LookupCallback, Del)
| IncrementAsyncO ps()
| Next iProviderIndex
|
| While m_async_ops > 0
| Thread.Sleep(20 0)
| End While
|
|
Nov 21 '05 #4
Thanks for all of the quick responses. I'll try out these different methods
over the weekend.

Brian, as far as the m_async_ops variable goes, I am using
Interlocked.Inc rement and Interlocked.Dec rement to change the value
m_async_ops. Won't those block another thread from reading the value or do I
need to also use some sort of synchronization while I read?

Jay, right now I'm calling the EndInvoke in the LookupCallback routine which
happens immediately when each call is finished. Is there any problems with
not calling the EndInvoke immediately? For instance, if the loop makes 5
calls and the first one happens to take 30 seconds and the other 4 take on 1
second. The first EndInvoke call will be blocking for 30 seconds even though
the other calls are finished. That reminds me of another question I have.
With the way I currently have it, does my callback function run under the
main thread or the thread that the acync call runs under?

thanks again,
Ryan

"ryan" <ro************ *@inval.hotmail .com> wrote in message
news:eI******** ******@TK2MSFTN GP09.phx.gbl...
Hi,
I've omitted a large chunk of the code for clarity but the loop below is
how I'm calling a delegate function asynchronously. After I start the each
call I'm incrementing a counter and then making the main thread sleep
until the counter gets back to zero. The call back function for each call
decrements the counter. Is there a better way to make the thread wait
until all calls are complete besides using the counter? I've seen some
things with using an IAsyncResult but I'm not sure how to do that in my
case since I'm making 1 to n calls.
Thanks,
Ryan

For iProviderIndex As Int32 = 0 To oProviders.Leng th - 1
oLookupReq = New Schema.LookupRe quest
oLookup =
CType(Activator .CreateInstance (Type.GetType(o LookupType.clas s_id)),
Schema.IPrequal Lookup)
Del = New LookupAsyncDele gate(AddressOf oLookup.GetPreq ualResponse)
Del.BeginInvoke (oLookupReq, AddressOf LookupCallback, Del)
IncrementAsyncO ps()
Next iProviderIndex

While m_async_ops > 0
Thread.Sleep(20 0)
End While

Nov 21 '05 #5
Ryan,

Go with Jay's idea. It's much better. In fact, that's the way I did a
similar chore in the past so I'm not really sure what I was thinking
when I suggested the alternative. My other comments are inline.

ryan wrote:
Thanks for all of the quick responses. I'll try out these different methods
over the weekend.

Brian, as far as the m_async_ops variable goes, I am using
Interlocked.Inc rement and Interlocked.Dec rement to change the value
m_async_ops. Won't those block another thread from reading the value or do I
need to also use some sort of synchronization while I read?

Yes, you need to use some sort of synchronization during reads as well.
No, technically the Interlocked methods don't block other threads from
reading the value, but that's not the issue anyway. The issue is with
memory barriers, or more specifically, the lack thereof in this case.
A memory barrier basically tells the hardware to fetch the value from
main memory instead of using a register or on-chip cache. Likewise,
during writes it tells the hardware to go ahead and write to main
memory. The Interlocked class, like all of the synchronization
primitives, creates the memory barrier so the writes you make on other
threads will be flushed to main memory, but other threads that are
reading the counter are not guarenteed to see those changes. There are
several options:

1) Use SyncLock for both reading and writing to m_async_ops.

2) Use the Interlocked.Com pareExchange method to read the value. It's
a little odd how this works so I have provided an example.

While Interlocked.Com pareExchange(m_ async_ops, m_async_ops,
m_async_ops) > 0
Thread.Sleep(20 0)
End While

3) Use Thread.Volatile Read.

4) In C# you could mark m_async_ops with the volatile keyword.

Personally, I would use #1, but the others are acceptable as well.

Read this article for more information.

<http://www.yoda.arachs ys.com/csharp/threads/volatility.shtm l>
Jay, right now I'm calling the EndInvoke in the LookupCallback routine which
happens immediately when each call is finished. Is there any problems with
not calling the EndInvoke immediately? For instance, if the loop makes 5
calls and the first one happens to take 30 seconds and the other 4 take on 1
second. The first EndInvoke call will be blocking for 30 seconds even though
the other calls are finished.
Yes, that's perfectly acceptable.
That reminds me of another question I have.
With the way I currently have it, does my callback function run under the
main thread or the thread that the acync call runs under?
It runs on the thread that the async call to your delegate runs on. It
isn't the thread that called Delegate.BeginI nvoke.
thanks again,
Ryan


Nov 21 '05 #6
Michael,

Is it not possible that the queue can lockup the process because of the
limit of the amount of parallel processed threads?

Another disadvantage can be that by the queue in fact the processes are
accessed sequential at the moment the start to become ready.

(Just a thought reading your message, not really deeply investigated).

:-)

Cor
Nov 21 '05 #7
Thanks for the enlightenment. I always though it was safe to read a value
without synchronization . I'll change it to use SyncLock.
"Brian Gideon" <br*********@ya hoo.com> wrote in message
news:11******** **************@ g47g2000cwa.goo glegroups.com.. .
Ryan,

Go with Jay's idea. It's much better. In fact, that's the way I did a
similar chore in the past so I'm not really sure what I was thinking
when I suggested the alternative. My other comments are inline.

ryan wrote:
Thanks for all of the quick responses. I'll try out these different
methods
over the weekend.

Brian, as far as the m_async_ops variable goes, I am using
Interlocked.Inc rement and Interlocked.Dec rement to change the value
m_async_ops. Won't those block another thread from reading the value or
do I
need to also use some sort of synchronization while I read?


Yes, you need to use some sort of synchronization during reads as well.
No, technically the Interlocked methods don't block other threads from
reading the value, but that's not the issue anyway. The issue is with
memory barriers, or more specifically, the lack thereof in this case.
A memory barrier basically tells the hardware to fetch the value from
main memory instead of using a register or on-chip cache. Likewise,
during writes it tells the hardware to go ahead and write to main
memory. The Interlocked class, like all of the synchronization
primitives, creates the memory barrier so the writes you make on other
threads will be flushed to main memory, but other threads that are
reading the counter are not guarenteed to see those changes. There are
several options:

1) Use SyncLock for both reading and writing to m_async_ops.

2) Use the Interlocked.Com pareExchange method to read the value. It's
a little odd how this works so I have provided an example.

While Interlocked.Com pareExchange(m_ async_ops, m_async_ops,
m_async_ops) > 0
Thread.Sleep(20 0)
End While

3) Use Thread.Volatile Read.

4) In C# you could mark m_async_ops with the volatile keyword.

Personally, I would use #1, but the others are acceptable as well.

Read this article for more information.

<http://www.yoda.arachs ys.com/csharp/threads/volatility.shtm l>
Jay, right now I'm calling the EndInvoke in the LookupCallback routine
which
happens immediately when each call is finished. Is there any problems
with
not calling the EndInvoke immediately? For instance, if the loop makes 5
calls and the first one happens to take 30 seconds and the other 4 take
on 1
second. The first EndInvoke call will be blocking for 30 seconds even
though
the other calls are finished.


Yes, that's perfectly acceptable.
That reminds me of another question I have.
With the way I currently have it, does my callback function run under the
main thread or the thread that the acync call runs under?


It runs on the thread that the async call to your delegate runs on. It
isn't the thread that called Delegate.BeginI nvoke.
thanks again,
Ryan

Nov 21 '05 #8
Ryan,
| Brian, as far as the m_async_ops variable goes, I am using
| Interlocked.Inc rement and Interlocked.Dec rement to change the value
In addition to Brian's comments: Interlocked.Dec rement returns the new
decremented value, I would either use the Decrement's return value or a
SyncLock to check the variable itself.
| Jay, right now I'm calling the EndInvoke in the LookupCallback routine
which
| happens immediately when each call is finished.
I only call EndInvoke in the CallBack when no body else (such as the main
thread) cares that the async method finished or not.
| Is there any problems with
| not calling the EndInvoke immediately?
It doesn't matter when you call EndInvoke, it only matters that you call it.
If you don't call it I understand that you can leak resources.
| For instance, if the loop makes 5
| calls and the first one happens to take 30 seconds and the other 4 take on
1
| second. The first EndInvoke call will be blocking for 30 seconds even
though
| the other calls are finished.
That is the beauty of using the For Each (thinking about it, one could use a
System.Collecti ons.Queue also). Your main process will only block for the
longest running async method, quick running async methods will return from
EndInvoke "right away".
| With the way I currently have it, does my callback function run under the
| main thread or the thread that the acync call runs under?
As Brian states the callback function runs on the thread that the ascync
call runs under.

--
Jay [MVP - Outlook]
..NET Application Architect, Enthusiast, & Evangelist
T.S. Bradley - http://www.tsbradley.net
"ryan" <ro************ *@inval.hotmail .com> wrote in message
news:OA******** ******@TK2MSFTN GP15.phx.gbl...
| Thanks for all of the quick responses. I'll try out these different
methods
| over the weekend.
|
| Brian, as far as the m_async_ops variable goes, I am using
| Interlocked.Inc rement and Interlocked.Dec rement to change the value
| m_async_ops. Won't those block another thread from reading the value or do
I
| need to also use some sort of synchronization while I read?
|
| Jay, right now I'm calling the EndInvoke in the LookupCallback routine
which
| happens immediately when each call is finished. Is there any problems with
| not calling the EndInvoke immediately? For instance, if the loop makes 5
| calls and the first one happens to take 30 seconds and the other 4 take on
1
| second. The first EndInvoke call will be blocking for 30 seconds even
though
| the other calls are finished. That reminds me of another question I have.
| With the way I currently have it, does my callback function run under the
| main thread or the thread that the acync call runs under?
|
| thanks again,
| Ryan
|
|
|
| "ryan" <ro************ *@inval.hotmail .com> wrote in message
| news:eI******** ******@TK2MSFTN GP09.phx.gbl...
| > Hi,
| > I've omitted a large chunk of the code for clarity but the loop below is
| > how I'm calling a delegate function asynchronously. After I start the
each
| > call I'm incrementing a counter and then making the main thread sleep
| > until the counter gets back to zero. The call back function for each
call
| > decrements the counter. Is there a better way to make the thread wait
| > until all calls are complete besides using the counter? I've seen some
| > things with using an IAsyncResult but I'm not sure how to do that in my
| > case since I'm making 1 to n calls.
| > Thanks,
| > Ryan
| >
| > For iProviderIndex As Int32 = 0 To oProviders.Leng th - 1
| > oLookupReq = New Schema.LookupRe quest
| > oLookup =
| > CType(Activator .CreateInstance (Type.GetType(o LookupType.clas s_id)),
| > Schema.IPrequal Lookup)
| > Del = New LookupAsyncDele gate(AddressOf oLookup.GetPreq ualResponse)
| > Del.BeginInvoke (oLookupReq, AddressOf LookupCallback, Del)
| > IncrementAsyncO ps()
| > Next iProviderIndex
| >
| > While m_async_ops > 0
| > Thread.Sleep(20 0)
| > End While
| >
|
|
Nov 21 '05 #9
Well i believe it is just the other way around i.o.w. with threading and a
queue you have some control over the execution ( you could even create a
construction with prio`s etc etc ) with executing asynchronous delegates
you do not have anny control at all

if it is really about speed threading and asynchronous methods are only
interesting if your proggy runs on a multi processor system , otherwise the
overhead is to costly and it would decrease performance of your project .

in the Balena book \ and VB.net remoting ( distributed programming ) book
are some nice examples that show that threading most of the times isn`t
interesting at all because of the overhead it costs .

however in the near duall processor future it is great tech.

;-)

Michel Posseth


"Cor Ligthert [MVP]" <no************ @planet.nl> schreef in bericht
news:es******** ******@tk2msftn gp13.phx.gbl...
Michael,

Is it not possible that the queue can lockup the process because of the
limit of the amount of parallel processed threads?

Another disadvantage can be that by the queue in fact the processes are
accessed sequential at the moment the start to become ready.

(Just a thought reading your message, not really deeply investigated).

:-)

Cor

Nov 21 '05 #10

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

8
2009
by: Dave | last post by:
I'm using the BeginInvoke method of a delegate to invoke a thread asynchronously and then use the EndInvoke to retrieve the value. This works wonderfully until a Serviced Component is added to the mix. When the Serviced Component is invoked with BeginInvoke, the code hangs for the duration of the call rather than running async. Any ideas? Sample code below: Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As...
3
4788
by: mvdevnull | last post by:
static void Main(string args) { DoSomething(); } static void DoSomething() { for (int i=0; i<=10; i++) { CallAsyncMethod(); } } my problem is when i run the app console exists without really completing DoSomething() if i add 'Console.ReadLine() to Main() then console waits until
2
1401
by: Winston Nimchan | last post by:
Hi: I am trying to develop a server application that listens for incoming network request and processes these requests. Processing request involves analyzing the packet, applying business rules, updating database and generating a response packet. What is the best way to go about this? I've downloaded code from the net that creates an asynchronous socket server
10
2975
by: Shawn Meyer | last post by:
Hello - I am trying to write a class that has an async BeginX and EndX, plus the regular X syncronous method. Delegates seemed like the way to go, however, I still am having problems getting exactly what I want. Here are my goals 1. I would like the IAsyncResult that is returned by the Begin function to be able to be waited on or polled to check for completion. 2. The Begin function would take a callback, and the async process would
7
2873
by: Shak | last post by:
Hi all, I'm trying to write a thread-safe async method to send a message of the form (type)(contents). My model is as follows: private void SendMessage(int type, string message) { //lets send the messagetype via async NetworkStream ns = client.GetStream(); //assume client globally accessible
4
1552
by: Nikolay Unguzov | last post by:
Hi, I want to know how to start two or more async methods, but wait each one to complete, before proceed to the next one. My goal is to do many time-consuming tasks one after other but not block UI. I can use Application.DoEvents(), but is this the only solution? Nikolay Unguzov
3
2549
by: Giulio Petrucci | last post by:
Hi there, I'm quite a newbie in Web Service programming/using and I'm sorry if my question could sound quite "stupid". ;-) I'm working on an application which should request a service to a WebService, calling its method "FooMethod(...args...)". I've imported the web reference within my VisualStudio project and tryed to invoke the method. I noticed that the intellisense expose also: - an "AsyncFooMethod(...args...(+1 overloads))";
2
2074
by: billsahiker | last post by:
I wrote a test program to help understand asynchronous calls in c#. I have a working VB.NET app that uses a similar technique but I cannot get it to work in c#. The errors I get and the code below. I understand the need for threading when updating UI and the general concept of what is going on but do not understand the two errors.: Error 1 'testwinform.Form1.WorkDoneDelegate()' must declare a body because it is not marked abstract or...
2
5585
by: jojoba | last post by:
Hello to all! I have a fairly simple webservice running in asp.net ajax under c# (vs 2008). I built the service and it runs just dandy when i test it by itself in visual studio. However, to make it work, i had to break up the webmethod into the BeginXXX, EndXXX model as per http://msdn2.microsoft.com/en-us/library/aa480516.aspx But now, i can no longer call this method from javascript (since to
0
9744
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can effortlessly switch the default language on Windows 10 without reinstalling. I'll walk you through it. First, let's disable language synchronization. With a Microsoft account, language settings sync across devices. To prevent any complications,...
0
11011
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed. This is as boiled down as I can make it. Here is my compilation command: g++-12 -std=c++20 -Wnarrowing bit_field.cpp Here is the code in...
0
10670
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth. The Art of Business Website Design Your website is...
1
10725
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows Update option using the Control Panel or Settings app; it automatically checks for updates and installs any it finds, whether you like it or not. For most users, this new feature is actually very convenient. If you want to control the update process,...
0
9503
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own.... Now, this would greatly impact the work of software developers. The idea...
1
7900
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new presenter, Adolph Dupré who will be discussing some powerful techniques for using class modules. He will explain when you may want to use classes instead of User Defined Types (UDT). For example, to manage the data in unbound forms. Adolph will...
0
7072
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one. At the time of converting from word file to html my equations which are in the word document file was convert into image. Globals.ThisAddIn.Application.ActiveDocument.Select();...
0
5735
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols. I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
0
5931
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.