Unraveling Multimodality with Large Language Models.pdf
Async in .NET
1.
2. What is Async?
Synchronous
every line of code is executed in order
the next line doesn’t execute until the
current one is completed
Asynchronous
an operation is started, and then code
continues
A callback is usually executed when the
operation completes
3. Why Async?
Essential when executing long running
operations, such as file or network
access
Especially important when starting
operations on the UI thread – async
prevents the UI from locking up while
the operation completes
4. Async Programming Model
(APM)
.NET’s first crack at async
Uses method signatures like Begin* and
End*
i.e. Stream.BeginRead
Returns an “IAsyncResult” object to
query status of operation
Usually executes a callback when
operation is completed
5. Event-based Async Pattern
(EAP)
2nd attempt at Async
Uses events to notify when async
operations complete
i.e. WebClient.OnDownloadStringCompleted
Operation is started with *Async
i.e. WebClient.DownloadStringAsync
No IAsyncResult – hard to query current
status
Sometimes they have “OnProgress” events
6. Task Async Pattern
Uses Task Parallel Library to wrap APM
methods
Task.Factory.FromAsync(Begin*, End*,
args)
Get access to Task functionality
ContinueWith to execute code after
operation is complete
ContinueWhenAll to wait for multiple async
operations
7. The New Hotness – Async &
Await
In an effort to simplify async even
more, Async and Await keywords
introduced into .net 4.5
Async – indicates that a method has a
point at which it can be suspended
Await – suspends the current method
until an operation yields a result
8. Async Control Flow
Starts an async operation by calling async
method
Execute whatever other code you’d like
while operation executes
Call await to suspend method until async
operation returns
This will return control to the previous method in
the call stack
Once async operation returns, control is
restored to method and continues as
normal
9. Things To Know
This is all managed through Tasks
Await essentially calls Task.Wait() and
automatically returns Task.Result
Most of this happens on the same thread
Actually uses time slices interleaved within the
current thread
Meant to be used to create non-blocking
operations
By convention, async methods should end
with “Async”