Is there a way to setup asychronous calls in IronRuby. I’ve used things
like WebClient.download_string_async, but I’m wondering if I can setup
an async using just IronRuby.
For example:
@data.get_settings do |settings|
do stuff after async call
end
Where get_settings is an async method and it executes the block after it
is completed.
Thanks for any help,
Randall
What do you mean by “set up asynchronous calls”?
If your get_settings method is a C# method using the IAsyncResult
pattern, then you should be able to invoke it from IronRuby.
From memory you can pass a ruby Proc in place of the AsyncCallback and it should all work:
Example:
callback = lambda{ |asyncresult| puts data.end_get_settings(asyncresult)
}
data.begin_get_settings(“abc”, callback, nil)
If you want to write your own asynchronous method not involving C# at
all, then you can do that too. If that’s the case, then all you really
need to do is remember to call the block when you’re done.
Example
def get_settings(&block)
do_long_thing
settings = 123
block.call(settings)
end
In a real function you’d probably run the body of get_settings in
another thread, but I won’t go into how to do threading, as there may be
other better ways depending on your situation.
Cheers