<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<doxygen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="compound.xsd" version="1.8.15">
  <compounddef id="overview_8md" kind="file" language="Markdown">
    <compoundname>overview.md</compoundname>
    <briefdescription>
    </briefdescription>
    <detaileddescription>
    </detaileddescription>
    <programlisting>
<codeline><highlight class="normal">Concurrency<sp/>Kit<sp/>Overview</highlight></codeline>
<codeline><highlight class="normal">========================</highlight></codeline>
<codeline><highlight class="normal">The<sp/>Concurrency<sp/>Kit<sp/>is<sp/>a<sp/>.NET/Mono<sp/>kit<sp/>that<sp/>includes<sp/>a<sp/>port<sp/>of<sp/>the<sp/>[Task<sp/>Parallel<sp/>Library](http://msdn.microsoft.com/en-us/library/dd460717.aspx)<sp/>and<sp/>extends<sp/>it<sp/>to<sp/>support<sp/>[Fibers](http://en.wikipedia.org/wiki/Fiber_(computer_science)),<sp/>[Coroutines](http://en.wikipedia.org/wiki/Coroutine),<sp/>and<sp/>[Unity](http://unity3d.com/).<sp/>Fibers<sp/>allow<sp/>code<sp/>paths<sp/>to<sp/>execute<sp/>concurrently<sp/>using<sp/>a<sp/>single<sp/>thread<sp/>by<sp/>leveraging<sp/>the<sp/>co-operative<sp/>yielding<sp/>behavior<sp/>of<sp/>coroutines.</highlight></codeline>
<codeline></codeline>
<codeline></codeline>
<codeline><highlight class="normal">```{.cs}</highlight></codeline>
<codeline><highlight class="normal">//<sp/>Start<sp/>task<sp/>1</highlight></codeline>
<codeline><highlight class="normal">var<sp/>t1<sp/>=<sp/>Task.Factory.StartNew(()<sp/>=&gt;<sp/>PatHead());</highlight></codeline>
<codeline></codeline>
<codeline><highlight class="normal">//<sp/>Start<sp/>task<sp/>2</highlight></codeline>
<codeline><highlight class="normal">var<sp/>t2<sp/>=<sp/>Task.Factory.StartNew(()<sp/>=&gt;<sp/>RubTummy());</highlight></codeline>
<codeline></codeline>
<codeline><highlight class="normal">//<sp/>This<sp/>task<sp/>will<sp/>complete<sp/>when<sp/>t1<sp/>and<sp/>t2<sp/>complete<sp/>and</highlight></codeline>
<codeline><highlight class="normal">//<sp/>then<sp/>it<sp/>will<sp/>continue<sp/>by<sp/>executing<sp/>a<sp/>happy<sp/>dance.</highlight></codeline>
<codeline><highlight class="normal">Task.WhenAll(t1,<sp/>t2).ContinueWith((t3)<sp/>=&gt;<sp/>HappyDance());</highlight></codeline>
<codeline><highlight class="normal">```</highlight></codeline>
<codeline></codeline>
<codeline><highlight class="normal">Because<sp/>code<sp/>written<sp/>in<sp/>this<sp/>manner<sp/>is<sp/>designed<sp/>with<sp/>concurrency<sp/>in<sp/>mind,<sp/>tasks<sp/>can<sp/>run<sp/>in<sp/>parallel<sp/>across<sp/>multiple<sp/>threads<sp/>or<sp/>as<sp/>concurrent<sp/>fibers<sp/>on<sp/>a<sp/>single<sp/>thread<sp/>just<sp/>by<sp/>changing<sp/>out<sp/>the<sp/>task<sp/>scheduler.<sp/>This<sp/>flexibility<sp/>makes<sp/>it<sp/>easy<sp/>to<sp/>write<sp/>and<sp/>maintain<sp/>asynchronous<sp/>code<sp/>that<sp/>scales.</highlight></codeline>
<codeline></codeline>
<codeline><highlight class="normal">Provided<sp/>Packages</highlight></codeline>
<codeline><highlight class="normal">-----------------</highlight></codeline>
<codeline><highlight class="normal">The<sp/>Concurrency<sp/>Kit<sp/>consists<sp/>of<sp/>four<sp/>modular<sp/>packages.</highlight></codeline>
<codeline></codeline>
<codeline><highlight class="normal">![Packages](images/packages.png)</highlight></codeline>
<codeline></codeline>
<codeline><highlight class="normal">Using<sp/>Asynchronous<sp/>Tasks</highlight></codeline>
<codeline><highlight class="normal">------------------------</highlight></codeline>
<codeline><highlight class="normal">When<sp/>using<sp/>a<sp/>.NET<sp/>runtime<sp/>earlier<sp/>than<sp/>v4,<sp/>add<sp/>a<sp/>reference<sp/>to<sp/>the<sp/>**System.Threading.dll**<sp/>assembly<sp/>provided<sp/>by<sp/>the<sp/>Concurrency<sp/>Kit<sp/>to<sp/>add<sp/>support<sp/>for<sp/>[Tasks](http://msdn.microsoft.com/en-us/library/dd537609)<sp/>and<sp/>[Thread-Safe<sp/>Collections](http://msdn.microsoft.com/en-us/library/dd997305.aspx)<sp/>to<sp/>your<sp/>project.</highlight></codeline>
<codeline></codeline>
<codeline><highlight class="normal">For<sp/>a<sp/>full<sp/>explanation<sp/>of<sp/>the<sp/>Task<sp/>programming<sp/>model,<sp/>please<sp/>see<sp/>the<sp/>[Task<sp/>Parallel<sp/>Library](http://msdn.microsoft.com/en-us/library/dd460717)<sp/>documentation<sp/>on<sp/>MSDN.</highlight></codeline>
<codeline></codeline>
<codeline><highlight class="normal">Using<sp/>Fibers</highlight></codeline>
<codeline><highlight class="normal">------------</highlight></codeline>
<codeline><highlight class="normal">Fiber<sp/>support<sp/>is<sp/>provided<sp/>by<sp/>the<sp/>**SpicyPixel.Threading.dll**<sp/>assembly<sp/>and<sp/>it<sp/>includes<sp/>packages<sp/>for<sp/>both<sp/>the<sp/>core<sp/>fiber<sp/>features<sp/>as<sp/>well<sp/>as<sp/>an<sp/>asynchronous<sp/>task<sp/>model<sp/>for<sp/>fibers.<sp/></highlight></codeline>
<codeline></codeline>
<codeline><highlight class="normal">Please<sp/>see<sp/>the<sp/>[Fibers](Docs/fibers.md)<sp/>and<sp/>[Fiber<sp/>Tasks](Docs/fiber-tasks.md)<sp/>topics<sp/>for<sp/>more<sp/>information.</highlight></codeline>
<codeline></codeline>
<codeline><highlight class="normal">Using<sp/>Fibers<sp/>in<sp/>Unity</highlight></codeline>
<codeline><highlight class="normal">---------------------</highlight></codeline>
<codeline><highlight class="normal">Unity<sp/>specific<sp/>fiber<sp/>support<sp/>is<sp/>provided<sp/>by<sp/>the<sp/>**SpicyPixel.Threading.Unity.dll**<sp/>assembly<sp/>and<sp/>it<sp/>includes<sp/>a<sp/>[UnityFiberScheduler](@ref<sp/>SpicyPixel.Threading.UnityFiberScheduler)<sp/>that<sp/>can<sp/>schedule<sp/>work<sp/>as<sp/>a<sp/>Unity<sp/>coroutine<sp/>using<sp/>either<sp/>the<sp/>core<sp/>fiber<sp/>model<sp/>or<sp/>the<sp/>task<sp/>model.<sp/></highlight></codeline>
<codeline></codeline>
<codeline><highlight class="normal">The<sp/>package<sp/>also<sp/>extends<sp/>MonoBehaviour<sp/>to<sp/>support<sp/>convenience<sp/>methods<sp/>for<sp/>working<sp/>with<sp/>fibers<sp/>and<sp/>tasks.<sp/>See<sp/>[Unity<sp/>Integration](Docs/unity-integration.md).</highlight></codeline>
<codeline></codeline>
<codeline><highlight class="normal">Version<sp/>History</highlight></codeline>
<codeline><highlight class="normal">---------------</highlight></codeline>
<codeline><highlight class="normal">Version<sp/>1.0.4</highlight></codeline>
<codeline></codeline>
<codeline><highlight class="normal"><sp/>*<sp/>Integrate<sp/>latest<sp/>Mono<sp/>version</highlight></codeline>
<codeline><highlight class="normal"><sp/>*<sp/>AOT<sp/>fixes</highlight></codeline>
<codeline><highlight class="normal"><sp/>*<sp/>Rename<sp/>scheduler<sp/>&apos;SharedInstance&apos;<sp/>singletons<sp/>to<sp/>&apos;Default&apos;<sp/>for<sp/>consistency<sp/>with<sp/>TPL</highlight></codeline>
<codeline></codeline>
<codeline><highlight class="normal">Version<sp/>1.0.3</highlight></codeline>
<codeline></codeline>
<codeline><highlight class="normal"><sp/>*<sp/>Support<sp/>iOS<sp/>by<sp/>working<sp/>around<sp/>AOT<sp/>compiler<sp/>limitations</highlight></codeline>
<codeline><highlight class="normal"><sp/>*<sp/>Add<sp/>the<sp/>following<sp/>convenience<sp/>types<sp/>and<sp/>members:</highlight></codeline>
<codeline><highlight class="normal"><sp/><sp/>*<sp/>class<sp/>UnitySynchronizationContext</highlight></codeline>
<codeline><highlight class="normal"><sp/><sp/>*<sp/>class<sp/>UnityTaskFactory</highlight></codeline>
<codeline><highlight class="normal"><sp/><sp/>*<sp/>class<sp/>UnityTaskScheduler</highlight></codeline>
<codeline><highlight class="normal"><sp/><sp/>*<sp/>property<sp/>UnityFiberScheduler.SharedInstance</highlight></codeline>
<codeline><highlight class="normal"><sp/><sp/>*<sp/>property<sp/>ConcurrentBehaviour.SharedInstance</highlight></codeline>
<codeline><highlight class="normal"><sp/>*<sp/>Add<sp/>Unity<sp/>sample<sp/>ConcurrencyKitSample</highlight></codeline>
<codeline></codeline>
<codeline><highlight class="normal">Version<sp/>1.0</highlight></codeline>
<codeline></codeline>
<codeline><highlight class="normal"><sp/>*<sp/>Initial<sp/>release</highlight></codeline>
    </programlisting>
    <location file="Docs/overview.md"/>
  </compounddef>
</doxygen>
