From 74a538f6725ebc83efda4bb07d5747e8a6359e19 Mon Sep 17 00:00:00 2001 From: Atsushi Eno Date: Mon, 16 Dec 2013 22:30:03 +0900 Subject: Import Official Rx 2.2 (3ebdd2e09991) I made changes from the original source tree to match the older tree so that we don't have to make several changes to project tree generator. (There is actually no new sources in Rx so hopefully we can just reuse existing modifications in the tree). --- Ix/NET/.gitattributes | 22 - Ix/NET/.gitignore | 163 - Ix/NET/35MSSharedLib1024.snk | Bin 0 -> 160 bytes Ix/NET/Common.targets | 279 +- Ix/NET/Import.targets | 28 +- Ix/NET/Interactive Extensions.sln | 262 +- .../System.Interactive.Async/IAsyncEnumerable.cs | 4 +- .../System.Interactive.Async/IAsyncEnumerator.cs | 4 +- Ix/NET/System.Interactive.Async/IAsyncGrouping.cs | 4 +- .../IOrderedAsyncEnumerable.cs | 4 +- .../Properties/AssemblyInfo.cs | 22 +- .../System.Interactive.Async.csproj | 7 +- .../Properties/AssemblyInfo.cs | 23 +- .../System.Interactive.Providers.csproj | 8 +- Ix/NET/System.Interactive/EnumerableEx.Creation.cs | 11 + Ix/NET/System.Interactive/IAwaitable.cs | 23 + Ix/NET/System.Interactive/IYielder.cs | 101 + .../System.Interactive/Properties/AssemblyInfo.cs | 23 +- .../System.Interactive/System.Interactive.csproj | 10 +- Ix/NET/Tests/AsyncTests.Aggregates.cs | 2 +- Ix/NET/Tests/AsyncTests.Bugs.cs | 3 +- Ix/NET/Tests/AsyncTests.Conversions.cs | 3 +- Ix/NET/Tests/AsyncTests.Creation.cs | 2 +- Ix/NET/Tests/AsyncTests.Exceptions.cs | 4 +- Ix/NET/Tests/AsyncTests.Multiple.cs | 2 +- Ix/NET/Tests/AsyncTests.Single.cs | 2 +- Ix/NET/Tests/AsyncTests.cs | 2 +- Ix/NET/Tests/Properties/AssemblyInfo.cs | 7 +- Ix/NET/Tests/Tests.Buffering.cs | 2 +- Ix/NET/Tests/Tests.Creation.cs | 21 + Ix/NET/Tests/Tests.Qbservable.cs | 18 +- Ix/NET/Tests/Tests.csproj | 13 +- Rx/NET/Resources/Artwork/Logo_Color.design | Bin 0 -> 10291 bytes Rx/NET/Resources/Artwork/Logo_Color_2010x2000.psd | Bin 0 -> 1391084 bytes Rx/NET/Resources/Artwork/Logo_Color_300x300.png | Bin 0 -> 39715 bytes Rx/NET/Samples/Portable/.nuget/NuGet.Config | 6 + Rx/NET/Samples/Portable/.nuget/NuGet.exe | Bin 0 -> 1604096 bytes Rx/NET/Samples/Portable/.nuget/NuGet.targets | 136 + .../Net40ConsoleApp_NuGet.csproj | 79 + .../Portable/Net40ConsoleApp_NuGet/Program.cs | 46 + .../Properties/AssemblyInfo.cs | 36 + .../Portable/Net40ConsoleApp_NuGet/packages.config | 8 + .../Net40ConsoleApplication.csproj | 95 + .../Portable/Net40ConsoleApplication/Program.cs | 46 + .../Properties/AssemblyInfo.cs | 36 + Rx/NET/Samples/Portable/Portable.sln | 85 + .../Portable/PortableClassLibrary/PortableClass.cs | 28 + .../PortableClassLibrary.csproj | 72 + .../Properties/AssemblyInfo.cs | 30 + .../PortableClassLibrary_NuGet/PortableClass.cs | 28 + .../PortableClassLibrary_NuGet.csproj | 101 + .../Properties/AssemblyInfo.cs | 30 + .../Portable/PortableClassLibrary_NuGet/app.config | 11 + .../PortableClassLibrary_NuGet/packages.config | 8 + .../Portable/SilverlightApplication/App.xaml | 8 + .../Portable/SilverlightApplication/App.xaml.cs | 68 + .../Portable/SilverlightApplication/MainPage.xaml | 24 + .../SilverlightApplication/MainPage.xaml.cs | 58 + .../Properties/AppManifest.xml | 6 + .../Properties/AssemblyInfo.cs | 35 + .../SilverlightApplication.csproj | 138 + Rx/NET/Source/.nuget/NuGet.Config | 6 + Rx/NET/Source/.nuget/NuGet.exe | Bin 0 -> 1611440 bytes Rx/NET/Source/.nuget/NuGet.targets | 136 + Rx/NET/Source/35MSSharedLib1024.snk | Bin 0 -> 160 bytes Rx/NET/Source/BuildAll.proj | 6 + Rx/NET/Source/Common.targets | 127 +- Rx/NET/Source/Import.targets | 53 +- Rx/NET/Source/Local.testsettings | 16 - .../Properties/AssemblyInfo.cs | 12 +- .../Microsoft.Reactive.Testing/ReactiveTest.cs | 26 +- Rx/NET/Source/Playground/Playground.csproj | 2 +- Rx/NET/Source/Rx.sln | 1087 +- .../Properties/AssemblyInfo.cs | 14 +- .../ConcurrencyAbstractionLayer.Default.cs | 132 +- .../Concurrency/LocalScheduler.TimerQueue.cs | 12 +- .../Concurrency/Synchronization.ObserveOn.cs | 6 +- .../Reactive/Internal/ConcurrentDictionary.cs | 2 + .../Internal/PlatformEnlightenmentProvider.cs | 2 +- .../Reactive/Internal/Semaphore.Silverlight.cs | 2 +- .../System.Reactive.Core/Strings_Core.Generated.cs | 2 +- .../System.Reactive.Core.csproj | 11 + Rx/NET/Source/System.Reactive.Core/packages.config | 4 + .../Properties/AssemblyInfo.cs | 14 +- .../System.Reactive.Debugger.csproj | 2 + .../Properties/AssemblyInfo.cs | 14 +- .../Reactive/Linq/QbservableEx.Generated.cs | 3 +- .../System.Reactive.Experimental.csproj | 2 + .../System.Reactive.Interfaces/IObservable.cs | 5 +- .../Source/System.Reactive.Interfaces/IObserver.cs | 2 + .../Properties/AssemblyInfo.cs | 16 +- .../System.Reactive.Interfaces.csproj | 2 + .../System.Reactive.Linq/GlobalSuppressions.cs | 322 +- .../Properties/AssemblyInfo.cs | 15 +- .../Reactive/Internal/Helpers.cs | 2 +- .../Reactive/Internal/ReflectionUtils.cs | 8 +- .../Reactive/Linq/IQueryLanguage.cs | 23 +- .../Reactive/Linq/Observable.Blocking.cs | 14 +- .../Reactive/Linq/Observable.Concurrency.cs | 2 +- .../Reactive/Linq/Observable.Creation.cs | 6 +- .../Reactive/Linq/Observable.Imperative.cs | 2 +- .../Reactive/Linq/Observable.Multiple.cs | 13 +- .../Reactive/Linq/Observable.Single.cs | 6 +- .../Linq/Observable.StandardSequenceOperators.cs | 367 +- .../Reactive/Linq/Observable/AddRef.cs | 2 +- .../Reactive/Linq/Observable/Aggregate.cs | 2 +- .../Reactive/Linq/Observable/All.cs | 2 +- .../Reactive/Linq/Observable/Amb.cs | 2 +- .../Reactive/Linq/Observable/Any.cs | 8 +- .../Reactive/Linq/Observable/AsObservable.cs | 4 +- .../Reactive/Linq/Observable/Average.cs | 2 +- .../Reactive/Linq/Observable/Buffer.cs | 40 +- .../Reactive/Linq/Observable/Case.cs | 2 +- .../Reactive/Linq/Observable/Cast.cs | 4 +- .../Reactive/Linq/Observable/Catch.cs | 8 +- .../Reactive/Linq/Observable/Collect.cs | 2 +- .../Reactive/Linq/Observable/CombineLatest.cs | 2 +- .../Reactive/Linq/Observable/Concat.cs | 2 +- .../Reactive/Linq/Observable/Contains.cs | 2 +- .../Reactive/Linq/Observable/Count.cs | 8 +- .../Reactive/Linq/Observable/DefaultIfEmpty.cs | 2 +- .../Reactive/Linq/Observable/Defer.cs | 2 +- .../Reactive/Linq/Observable/Delay.cs | 26 +- .../Reactive/Linq/Observable/DelaySubscription.cs | 2 +- .../Reactive/Linq/Observable/Dematerialize.cs | 2 +- .../Reactive/Linq/Observable/Distinct.cs | 2 +- .../Linq/Observable/DistinctUntilChanged.cs | 2 +- .../Reactive/Linq/Observable/Do.cs | 2 +- .../Reactive/Linq/Observable/DoWhile.cs | 2 +- .../Reactive/Linq/Observable/ElementAt.cs | 2 +- .../Reactive/Linq/Observable/Empty.cs | 2 +- .../Reactive/Linq/Observable/Finally.cs | 2 +- .../Reactive/Linq/Observable/FirstAsync.cs | 8 +- .../Reactive/Linq/Observable/For.cs | 2 +- .../Reactive/Linq/Observable/ForEach.cs | 6 +- .../Reactive/Linq/Observable/FromEvent.cs | 2 +- .../Reactive/Linq/Observable/FromEventPattern.cs | 16 +- .../Reactive/Linq/Observable/Generate.cs | 14 +- .../Reactive/Linq/Observable/GetEnumerator.cs | 2 +- .../Reactive/Linq/Observable/GroupBy.cs | 16 +- .../Reactive/Linq/Observable/GroupByUntil.cs | 58 +- .../Reactive/Linq/Observable/GroupJoin.cs | 30 +- .../Reactive/Linq/Observable/If.cs | 2 +- .../Reactive/Linq/Observable/IgnoreElements.cs | 4 +- .../Reactive/Linq/Observable/IsEmpty.cs | 2 +- .../Reactive/Linq/Observable/Join.cs | 30 +- .../Reactive/Linq/Observable/LastAsync.cs | 8 +- .../Reactive/Linq/Observable/Latest.cs | 2 +- .../Reactive/Linq/Observable/LongCount.cs | 8 +- .../Reactive/Linq/Observable/Materialize.cs | 2 +- .../Reactive/Linq/Observable/Max.cs | 8 +- .../Reactive/Linq/Observable/MaxBy.cs | 2 +- .../Reactive/Linq/Observable/Merge.cs | 28 +- .../Reactive/Linq/Observable/Min.cs | 8 +- .../Reactive/Linq/Observable/MinBy.cs | 2 +- .../Reactive/Linq/Observable/MostRecent.cs | 2 +- .../Reactive/Linq/Observable/Multicast.cs | 2 +- .../Reactive/Linq/Observable/Never.cs | 2 +- .../Reactive/Linq/Observable/Next.cs | 2 +- .../Reactive/Linq/Observable/ObserveOn.cs | 8 +- .../Reactive/Linq/Observable/OfType.cs | 2 +- .../Reactive/Linq/Observable/OnErrorResumeNext.cs | 2 +- .../Reactive/Linq/Observable/PushToPullAdapter.cs | 2 +- .../Reactive/Linq/Observable/Range.cs | 2 +- .../Reactive/Linq/Observable/RefCount.cs | 2 +- .../Reactive/Linq/Observable/Repeat.cs | 2 +- .../Reactive/Linq/Observable/Return.cs | 2 +- .../Reactive/Linq/Observable/Sample.cs | 8 +- .../Reactive/Linq/Observable/Scan.cs | 2 +- .../Reactive/Linq/Observable/Select.cs | 12 +- .../Reactive/Linq/Observable/SelectMany.cs | 1008 +- .../Reactive/Linq/Observable/SequenceEqual.cs | 8 +- .../Reactive/Linq/Observable/SingleAsync.cs | 8 +- .../Reactive/Linq/Observable/Skip.cs | 12 +- .../Reactive/Linq/Observable/SkipLast.cs | 8 +- .../Reactive/Linq/Observable/SkipUntil.cs | 4 +- .../Reactive/Linq/Observable/SkipWhile.cs | 8 +- .../Reactive/Linq/Observable/Sum.cs | 2 +- .../Reactive/Linq/Observable/Switch.cs | 8 +- .../Reactive/Linq/Observable/Synchronize.cs | 2 +- .../Reactive/Linq/Observable/Take.cs | 12 +- .../Reactive/Linq/Observable/TakeLast.cs | 8 +- .../Reactive/Linq/Observable/TakeLastBuffer.cs | 8 +- .../Reactive/Linq/Observable/TakeUntil.cs | 4 +- .../Reactive/Linq/Observable/TakeWhile.cs | 8 +- .../Reactive/Linq/Observable/Throttle.cs | 8 +- .../Reactive/Linq/Observable/Throw.cs | 2 +- .../Reactive/Linq/Observable/TimeInterval.cs | 2 +- .../Reactive/Linq/Observable/Timeout.cs | 20 +- .../Reactive/Linq/Observable/Timer.cs | 8 +- .../Reactive/Linq/Observable/Timestamp.cs | 2 +- .../Reactive/Linq/Observable/ToArray.cs | 2 +- .../Reactive/Linq/Observable/ToDictionary.cs | 2 +- .../Reactive/Linq/Observable/ToList.cs | 2 +- .../Reactive/Linq/Observable/ToLookup.cs | 2 +- .../Reactive/Linq/Observable/ToObservable.cs | 2 +- .../Reactive/Linq/Observable/Using.cs | 2 +- .../Reactive/Linq/Observable/Where.cs | 10 +- .../Reactive/Linq/Observable/While.cs | 2 +- .../Reactive/Linq/Observable/Window.cs | 40 +- .../Reactive/Linq/Observable/Zip.cs | 8 +- .../Reactive/Linq/Observable/_.cs | 2 +- .../Reactive/Linq/QueryLanguage.Aggregates.cs | 2 +- .../Reactive/Linq/QueryLanguage.Binding.cs | 2 +- .../Reactive/Linq/QueryLanguage.Blocking.cs | 4 +- .../Reactive/Linq/QueryLanguage.Concurrency.cs | 2 +- .../Reactive/Linq/QueryLanguage.Conversions.cs | 2 +- .../Reactive/Linq/QueryLanguage.Creation.cs | 2 +- .../Reactive/Linq/QueryLanguage.Events.cs | 18 +- .../Reactive/Linq/QueryLanguage.Imperative.cs | 2 +- .../Reactive/Linq/QueryLanguage.Multiple.cs | 2 +- .../Reactive/Linq/QueryLanguage.Single.cs | 6 +- .../QueryLanguage.StandardSequenceOperators.cs | 212 +- .../Reactive/Linq/QueryLanguage.Time.cs | 10 +- .../Reactive/Subjects/BehaviorSubject.cs | 32 + .../System.Reactive.Linq/Strings_Linq.Generated.cs | 2 +- .../System.Reactive.Linq.csproj | 2 + .../Observable.Aliases.cs | 422 + .../Qbservable.Aliases.Generated.cs | 449 + .../System.Reactive.Observable.Aliases.csproj | 59 + .../Properties/AssemblyInfo.cs | 14 +- .../Concurrency/ConcurrencyAbstractionLayerImpl.cs | 52 +- .../Reactive/Concurrency/EventLoopScheduler.cs | 10 + .../Reactive/Concurrency/TaskPoolScheduler.cs | 8 + .../Internal/PlatformEnlightenmentProvider.cs | 2 +- .../Strings_PlatformServices.Generated.cs | 2 +- .../System.Reactive.PlatformServices.csproj | 2 + .../Properties/AssemblyInfo.cs | 12 +- .../Reactive/Linq/Qbservable.Generated.cs | 910 +- .../Reactive/ObservableQuery.cs | 8 +- .../Strings_Providers.Generated.cs | 2 +- .../System.Reactive.Providers.csproj | 2 + .../Properties/AssemblyInfo.cs | 12 +- .../Properties/AssemblyInfo.cs | 12 +- .../Properties/AssemblyInfo.cs | 14 +- .../Properties/AssemblyInfo.cs | 12 +- .../System.Reactive.WindowsRuntime.csproj | 52 +- .../Tests.System.Reactive/Dummies/DummyFunc.cs | 10 + .../Properties/AssemblyInfo.cs | 5 - .../Stress/Core/Schedulers/EventLoop.cs | 67 + .../Tests.System.Reactive.csproj | 10 +- .../Source/Tests.System.Reactive/Tests/Aliases.cs | 30 + .../Tests/Concurrency/EventLoopSchedulerTest.cs | 11 + .../DefaultConcurrencyAbstractionLayerTest.cs | 78 + .../Linq/ObservableStandardQueryOperatorTest.cs | 15862 +++++++++++++------ .../Tests/Linq/ObservableTimeTest.cs | 42 + .../Tests/Linq/Subjects/BehaviorSubjectTest.cs | 71 + Rx/NET/Source/packages.config | 6 + .../packages/Microsoft.Bcl.1.0.19/License.rtf | 505 + .../Microsoft.Bcl.1.0.19.nupkg | Bin 0 -> 882543 bytes .../Microsoft.Bcl.1.0.19.nuspec | 39 + .../packages/Microsoft.Bcl.1.0.19/ReleaseNotes.txt | 24 + .../Microsoft.Bcl.1.0.19/content/net45/_._ | 0 .../content/portable-net45+win8+wp8/_._ | 0 .../packages/Microsoft.Bcl.1.0.19/content/sl4/_._ | 0 .../packages/Microsoft.Bcl.1.0.19/content/sl5/_._ | 0 .../packages/Microsoft.Bcl.1.0.19/content/win8/_._ | 0 .../packages/Microsoft.Bcl.1.0.19/content/wp8/_._ | 0 .../lib/net40/System.Runtime.dll | Bin 0 -> 22128 bytes .../lib/net40/System.Runtime.xml | 56 + .../lib/net40/System.Threading.Tasks.dll | Bin 0 -> 34960 bytes .../lib/net40/System.Threading.Tasks.xml | 475 + .../lib/net40/ensureRedirect.xml | 0 .../packages/Microsoft.Bcl.1.0.19/lib/net45/_._ | 0 .../System.Runtime.dll | Bin 0 -> 39024 bytes .../System.Runtime.xml | 860 + .../System.Threading.Tasks.dll | Bin 0 -> 164496 bytes .../System.Threading.Tasks.xml | 8969 +++++++++++ .../ensureRedirect.xml | 0 .../portable-net40+sl4+win8+wp8/System.Runtime.dll | Bin 0 -> 22128 bytes .../portable-net40+sl4+win8+wp8/System.Runtime.xml | 56 + .../System.Threading.Tasks.dll | Bin 0 -> 164496 bytes .../System.Threading.Tasks.xml | 8969 +++++++++++ .../portable-net40+sl4+win8+wp8/ensureRedirect.xml | 0 .../lib/portable-net40+sl4+win8/System.Runtime.dll | Bin 0 -> 22128 bytes .../lib/portable-net40+sl4+win8/System.Runtime.xml | 56 + .../System.Threading.Tasks.dll | Bin 0 -> 164496 bytes .../System.Threading.Tasks.xml | 8969 +++++++++++ .../lib/portable-net40+sl4+win8/ensureRedirect.xml | 0 .../portable-net40+sl5+win8+wp8/System.Runtime.dll | Bin 0 -> 22128 bytes .../portable-net40+sl5+win8+wp8/System.Runtime.xml | 56 + .../System.Threading.Tasks.dll | Bin 0 -> 34960 bytes .../System.Threading.Tasks.xml | 475 + .../portable-net40+sl5+win8+wp8/ensureRedirect.xml | 0 .../lib/portable-net40+win8+wp8/System.Runtime.dll | Bin 0 -> 22128 bytes .../lib/portable-net40+win8+wp8/System.Runtime.xml | 56 + .../System.Threading.Tasks.dll | Bin 0 -> 34960 bytes .../System.Threading.Tasks.xml | 475 + .../lib/portable-net40+win8+wp8/ensureRedirect.xml | 0 .../lib/portable-net40+win8/System.Runtime.dll | Bin 0 -> 22128 bytes .../lib/portable-net40+win8/System.Runtime.xml | 56 + .../portable-net40+win8/System.Threading.Tasks.dll | Bin 0 -> 34960 bytes .../portable-net40+win8/System.Threading.Tasks.xml | 475 + .../lib/portable-net40+win8/ensureRedirect.xml | 0 .../lib/portable-net45+win8+wp8/_._ | 0 .../lib/sl4-windowsphone71/System.Runtime.dll | Bin 0 -> 39024 bytes .../lib/sl4-windowsphone71/System.Runtime.xml | 860 + .../sl4-windowsphone71/System.Threading.Tasks.dll | Bin 0 -> 164496 bytes .../sl4-windowsphone71/System.Threading.Tasks.xml | 8969 +++++++++++ .../lib/sl4-windowsphone71/ensureRedirect.xml | 0 .../lib/sl4/System.Runtime.dll | Bin 0 -> 22128 bytes .../lib/sl4/System.Runtime.xml | 56 + .../lib/sl4/System.Threading.Tasks.dll | Bin 0 -> 164496 bytes .../lib/sl4/System.Threading.Tasks.xml | 8969 +++++++++++ .../lib/sl5/System.Runtime.dll | Bin 0 -> 22128 bytes .../lib/sl5/System.Runtime.xml | 56 + .../lib/sl5/System.Threading.Tasks.dll | Bin 0 -> 34960 bytes .../lib/sl5/System.Threading.Tasks.xml | 475 + .../packages/Microsoft.Bcl.1.0.19/lib/win8/_._ | 0 .../packages/Microsoft.Bcl.1.0.19/lib/wp8/_._ | 0 .../Microsoft.Bcl.Async.1.0.16/License.rtf | 522 + .../Microsoft.Bcl.Async.1.0.16.nupkg | Bin 0 -> 504369 bytes .../Microsoft.Bcl.Async.1.0.16.nuspec | 33 + .../Microsoft.Bcl.Async.1.0.16/ReleaseNotes.txt | 18 + ...icrosoft.Threading.Tasks.Extensions.Desktop.dll | Bin 0 -> 47344 bytes ...icrosoft.Threading.Tasks.Extensions.Desktop.xml | 684 + .../net40/Microsoft.Threading.Tasks.Extensions.dll | Bin 0 -> 31440 bytes .../net40/Microsoft.Threading.Tasks.Extensions.xml | 275 + .../lib/net40/Microsoft.Threading.Tasks.dll | Bin 0 -> 37024 bytes .../lib/net40/Microsoft.Threading.Tasks.xml | 630 + .../net45/Microsoft.Threading.Tasks.Extensions.dll | Bin 0 -> 31440 bytes .../net45/Microsoft.Threading.Tasks.Extensions.xml | 275 + .../lib/net45/Microsoft.Threading.Tasks.dll | Bin 0 -> 37024 bytes .../lib/net45/Microsoft.Threading.Tasks.xml | 630 + .../Microsoft.Threading.Tasks.Extensions.dll | Bin 0 -> 31440 bytes .../Microsoft.Threading.Tasks.Extensions.xml | 275 + .../Microsoft.Threading.Tasks.dll | Bin 0 -> 37024 bytes .../Microsoft.Threading.Tasks.xml | 630 + .../Microsoft.Threading.Tasks.Extensions.dll | Bin 0 -> 31440 bytes .../Microsoft.Threading.Tasks.Extensions.xml | 275 + .../Microsoft.Threading.Tasks.dll | Bin 0 -> 37024 bytes .../Microsoft.Threading.Tasks.xml | 630 + .../Microsoft.Threading.Tasks.Extensions.dll | Bin 0 -> 31440 bytes .../Microsoft.Threading.Tasks.Extensions.xml | 275 + .../Microsoft.Threading.Tasks.dll | Bin 0 -> 37024 bytes .../Microsoft.Threading.Tasks.xml | 630 + .../Microsoft.Threading.Tasks.Extensions.Phone.dll | Bin 0 -> 28896 bytes .../Microsoft.Threading.Tasks.Extensions.Phone.xml | 141 + .../Microsoft.Threading.Tasks.Extensions.dll | Bin 0 -> 31440 bytes .../Microsoft.Threading.Tasks.Extensions.xml | 275 + .../Microsoft.Threading.Tasks.dll | Bin 0 -> 37024 bytes .../Microsoft.Threading.Tasks.xml | 630 + ...soft.Threading.Tasks.Extensions.Silverlight.dll | Bin 0 -> 28928 bytes ...soft.Threading.Tasks.Extensions.Silverlight.xml | 141 + .../sl4/Microsoft.Threading.Tasks.Extensions.dll | Bin 0 -> 31440 bytes .../sl4/Microsoft.Threading.Tasks.Extensions.xml | 275 + .../lib/sl4/Microsoft.Threading.Tasks.dll | Bin 0 -> 37024 bytes .../lib/sl4/Microsoft.Threading.Tasks.xml | 630 + .../win8/Microsoft.Threading.Tasks.Extensions.dll | Bin 0 -> 31440 bytes .../win8/Microsoft.Threading.Tasks.Extensions.xml | 275 + .../lib/win8/Microsoft.Threading.Tasks.dll | Bin 0 -> 37024 bytes .../lib/win8/Microsoft.Threading.Tasks.xml | 630 + .../Microsoft.Threading.Tasks.Extensions.Phone.dll | Bin 0 -> 28896 bytes .../Microsoft.Threading.Tasks.Extensions.Phone.xml | 141 + .../wp8/Microsoft.Threading.Tasks.Extensions.dll | Bin 0 -> 31440 bytes .../wp8/Microsoft.Threading.Tasks.Extensions.xml | 275 + .../lib/wp8/Microsoft.Threading.Tasks.dll | Bin 0 -> 37024 bytes .../lib/wp8/Microsoft.Threading.Tasks.xml | 630 + .../Microsoft.Bcl.Build.1.0.10/License-Stable.rtf | 505 + .../Microsoft.Bcl.Build.1.0.10.nupkg | Bin 0 -> 46014 bytes .../Microsoft.Bcl.Build.1.0.10.nuspec | 21 + .../Microsoft.Bcl.Build.1.0.10/content/net40/_._ | 0 .../content/netcore45/_._ | 0 .../content/portable-net40+win8+sl4+wp71/_._ | 0 .../content/sl4-windowsphone71/_._ | 0 .../Microsoft.Bcl.Build.1.0.10/content/sl4/_._ | 0 .../Microsoft.Bcl.Build.1.0.10/tools/Install.ps1 | 37 + .../tools/Microsoft.Bcl.Build.targets | 232 + .../Microsoft.Bcl.Build.1.0.10/tools/Uninstall.ps1 | 25 + .../packages/Microsoft.Bcl.Build.1.0.4/License.rtf | 505 + .../Microsoft.Bcl.Build.1.0.4.nupkg | Bin 0 -> 33316 bytes .../Microsoft.Bcl.Build.1.0.4.nuspec | 19 + .../Microsoft.Bcl.Build.1.0.4/content/net40/_._ | 0 .../content/netcore45/_._ | 0 .../content/portable-net40+win8+sl4+wp71/_._ | 0 .../content/sl4-windowsphone71/_._ | 0 .../Microsoft.Bcl.Build.1.0.4/content/sl4/_._ | 0 .../Microsoft.Bcl.Build.1.0.4/tools/Install.ps1 | 18 + .../tools/Microsoft.Bcl.Build.Tasks.dll | Bin 0 -> 17920 bytes .../tools/Microsoft.Bcl.Build.targets | 227 + .../Microsoft.Bcl.Build.1.0.4/tools/Uninstall.ps1 | 13 + Rx/NET/Source/packages/repositories.config | 4 + .../ConsoleApp45_NoPlatformServices.csproj | 30 +- .../Rx/ConsoleApp45_NoPlatformServices/Program.cs | 2 +- Rx/NET/Test/Rx/ConsoleApp45_NuGet/App.config | 16 - .../ConsoleApp45_NuGet/ConsoleApp45_NuGet.csproj | 36 +- Rx/NET/Test/Rx/ConsoleApp45_NuGet/Program.cs | 2 +- Rx/NET/Test/Rx/ConsoleApp45_NuGet/packages.config | 14 +- .../PortableLibraryProfile78_NuGet.csproj | 18 +- .../PortableLibraryProfile78_NuGet/packages.config | 10 +- Rx/NET/Test/Rx/Rx.sln | 271 - Rx/NET/Test/Rx/SilverlightApp5/App.xaml | 8 - Rx/NET/Test/Rx/SilverlightApp5/App.xaml.cs | 68 - Rx/NET/Test/Rx/SilverlightApp5/MainPage.xaml | 14 - Rx/NET/Test/Rx/SilverlightApp5/MainPage.xaml.cs | 51 - .../Rx/SilverlightApp5/Properties/AppManifest.xml | 6 - .../Rx/SilverlightApp5/Properties/AssemblyInfo.cs | 35 - .../Test/Rx/SilverlightApp5/SilverlightApp5.csproj | 120 - .../Rx/SilverlightApp5_NoPlatformServices/App.xaml | 8 - .../SilverlightApp5_NoPlatformServices/App.xaml.cs | 68 - .../MainPage.xaml | 14 - .../MainPage.xaml.cs | 51 - .../Properties/AppManifest.xml | 6 - .../Properties/AssemblyInfo.cs | 35 - .../SilverlightApp5_NoPlatformServices.csproj | 119 - Rx/NET/Test/Rx/WinFormsApp45/App.config | 6 - Rx/NET/Test/Rx/WinFormsApp45/Form1.Designer.cs | 84 - Rx/NET/Test/Rx/WinFormsApp45/Form1.cs | 40 - Rx/NET/Test/Rx/WinFormsApp45/Form1.resx | 120 - Rx/NET/Test/Rx/WinFormsApp45/Program.cs | 22 - .../Rx/WinFormsApp45/Properties/AssemblyInfo.cs | 36 - .../WinFormsApp45/Properties/Resources.Designer.cs | 71 - .../Rx/WinFormsApp45/Properties/Resources.resx | 117 - .../WinFormsApp45/Properties/Settings.Designer.cs | 30 - .../Rx/WinFormsApp45/Properties/Settings.settings | 7 - Rx/NET/Test/Rx/WinFormsApp45/WinFormsApp45.csproj | 122 - Rx/NET/Test/Rx/WinFormsApp45_NuGet/Form1.cs | 2 +- .../WinFormsApp45_NuGet/WinFormsApp45_NuGet.csproj | 26 +- Rx/NET/Test/Rx/WinFormsApp45_NuGet/packages.config | 12 +- .../WindowsPhoneAgent7/Properties/AssemblyInfo.cs | 37 - .../Test/Rx/WindowsPhoneAgent7/ScheduledAgent.cs | 64 - .../WindowsPhoneAgent7/WindowsPhoneAgent7.csproj | 78 - .../WindowsPhoneAgent8/Properties/AssemblyInfo.cs | 37 - .../Test/Rx/WindowsPhoneAgent8/ScheduledAgent.cs | 52 - .../WindowsPhoneAgent8/WindowsPhoneAgent8.csproj | 112 - Rx/NET/Test/Rx/WindowsPhoneApp7/App.xaml | 19 - Rx/NET/Test/Rx/WindowsPhoneApp7/App.xaml.cs | 142 - .../Test/Rx/WindowsPhoneApp7/ApplicationIcon.png | Bin 1881 -> 0 bytes Rx/NET/Test/Rx/WindowsPhoneApp7/Background.png | Bin 3521 -> 0 bytes Rx/NET/Test/Rx/WindowsPhoneApp7/MainPage.xaml | 37 - Rx/NET/Test/Rx/WindowsPhoneApp7/MainPage.xaml.cs | 55 - .../Rx/WindowsPhoneApp7/Properties/AppManifest.xml | 6 - .../Rx/WindowsPhoneApp7/Properties/AssemblyInfo.cs | 37 - .../WindowsPhoneApp7/Properties/WMAppManifest.xml | 37 - .../Test/Rx/WindowsPhoneApp7/SplashScreenImage.jpg | Bin 9417 -> 0 bytes .../Rx/WindowsPhoneApp7/WindowsPhoneApp7.csproj | 119 - .../WindowsPhoneApp7_NoPlatformServices/App.xaml | 19 - .../App.xaml.cs | 142 - .../ApplicationIcon.png | Bin 1881 -> 0 bytes .../Background.png | Bin 3521 -> 0 bytes .../MainPage.xaml | 37 - .../MainPage.xaml.cs | 51 - .../Properties/AppManifest.xml | 6 - .../Properties/AssemblyInfo.cs | 37 - .../Properties/WMAppManifest.xml | 35 - .../SplashScreenImage.jpg | Bin 9417 -> 0 bytes .../WindowsPhoneApp7_NoPlatformServices.csproj | 112 - Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/App.xaml | 19 - Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/App.xaml.cs | 142 - .../Rx/WindowsPhoneApp7_NuGet/ApplicationIcon.png | Bin 1881 -> 0 bytes .../Test/Rx/WindowsPhoneApp7_NuGet/Background.png | Bin 3521 -> 0 bytes .../Test/Rx/WindowsPhoneApp7_NuGet/MainPage.xaml | 37 - .../Rx/WindowsPhoneApp7_NuGet/MainPage.xaml.cs | 54 - .../Properties/AppManifest.xml | 6 - .../Properties/AssemblyInfo.cs | 37 - .../Properties/WMAppManifest.xml | 37 - .../WindowsPhoneApp7_NuGet/SplashScreenImage.jpg | Bin 9417 -> 0 bytes .../WindowsPhoneApp7_NuGet.csproj | 132 - .../Test/Rx/WindowsPhoneApp7_NuGet/packages.config | 10 - Rx/NET/Test/Rx/WindowsPhoneApp8/App.xaml | 20 - Rx/NET/Test/Rx/WindowsPhoneApp8/App.xaml.cs | 223 - .../Rx/WindowsPhoneApp8/Assets/AlignmentGrid.png | Bin 9042 -> 0 bytes .../Rx/WindowsPhoneApp8/Assets/ApplicationIcon.png | Bin 3392 -> 0 bytes .../Assets/Tiles/FlipCycleTileLarge.png | Bin 9930 -> 0 bytes .../Assets/Tiles/FlipCycleTileMedium.png | Bin 9070 -> 0 bytes .../Assets/Tiles/FlipCycleTileSmall.png | Bin 3674 -> 0 bytes .../Assets/Tiles/IconicTileMediumLarge.png | Bin 4937 -> 0 bytes .../Assets/Tiles/IconicTileSmall.png | Bin 3724 -> 0 bytes .../Test/Rx/WindowsPhoneApp8/LocalizedStrings.cs | 14 - Rx/NET/Test/Rx/WindowsPhoneApp8/MainPage.xaml | 64 - Rx/NET/Test/Rx/WindowsPhoneApp8/MainPage.xaml.cs | 64 - .../Rx/WindowsPhoneApp8/Properties/AppManifest.xml | 6 - .../Rx/WindowsPhoneApp8/Properties/AssemblyInfo.cs | 37 - .../WindowsPhoneApp8/Properties/WMAppManifest.xml | 38 - .../Resources/AppResources.Designer.cs | 127 - .../WindowsPhoneApp8/Resources/AppResources.resx | 137 - .../Rx/WindowsPhoneApp8/WindowsPhoneApp8.csproj | 179 - Rx/NET/Test/Rx/WindowsStoreApp8/App.xaml | 20 - Rx/NET/Test/Rx/WindowsStoreApp8/App.xaml.cs | 90 - Rx/NET/Test/Rx/WindowsStoreApp8/Assets/Logo.png | Bin 801 -> 0 bytes .../Test/Rx/WindowsStoreApp8/Assets/SmallLogo.png | Bin 329 -> 0 bytes .../Rx/WindowsStoreApp8/Assets/SplashScreen.png | Bin 2146 -> 0 bytes .../Test/Rx/WindowsStoreApp8/Assets/StoreLogo.png | Bin 429 -> 0 bytes .../Rx/WindowsStoreApp8/Common/StandardStyles.xaml | 1829 --- Rx/NET/Test/Rx/WindowsStoreApp8/MainPage.xaml | 15 - Rx/NET/Test/Rx/WindowsStoreApp8/MainPage.xaml.cs | 63 - .../Test/Rx/WindowsStoreApp8/Package.appxmanifest | 27 - .../Rx/WindowsStoreApp8/Properties/AssemblyInfo.cs | 29 - .../Rx/WindowsStoreApp8/WindowsStoreApp8.csproj | 164 - .../WindowsStoreApp8_TemporaryKey.pfx | Bin 2512 -> 0 bytes .../Rx/WindowsStoreApp8_NuGet/MainPage.xaml.cs | 2 +- .../Rx/WindowsStoreApp8_NuGet/Package.appxmanifest | 29 +- .../WindowsStoreApp8_NuGet.csproj | 50 +- .../WindowsStoreApp8_NuGet_TemporaryKey.pfx | Bin 2512 -> 2512 bytes Rx/NET/Test/Rx/WindowsStoreApp8_NuGet/app.config | 19 - .../Test/Rx/WindowsStoreApp8_NuGet/packages.config | 16 +- Rx/NET/Test/Rx/WpfApp45/App.config | 6 - Rx/NET/Test/Rx/WpfApp45/App.xaml | 8 - Rx/NET/Test/Rx/WpfApp45/App.xaml.cs | 17 - Rx/NET/Test/Rx/WpfApp45/MainWindow.xaml | 10 - Rx/NET/Test/Rx/WpfApp45/MainWindow.xaml.cs | 48 - Rx/NET/Test/Rx/WpfApp45/Properties/AssemblyInfo.cs | 55 - .../Rx/WpfApp45/Properties/Resources.Designer.cs | 71 - Rx/NET/Test/Rx/WpfApp45/Properties/Resources.resx | 117 - .../Rx/WpfApp45/Properties/Settings.Designer.cs | 30 - .../Test/Rx/WpfApp45/Properties/Settings.settings | 7 - Rx/NET/Test/Rx/WpfApp45/WpfApp45.csproj | 138 - Rx/NET/Test/Rx/WpfApp45_NuGet/App.config | 22 - Rx/NET/Test/Rx/WpfApp45_NuGet/MainWindow.xaml.cs | 2 +- .../Test/Rx/WpfApp45_NuGet/WpfApp45_NuGet.csproj | 39 +- Rx/NET/Test/Rx/WpfApp45_NuGet/packages.config | 14 +- Rx/NET/Test/Rx/WpfXbapApp45/App.xaml | 8 - Rx/NET/Test/Rx/WpfXbapApp45/App.xaml.cs | 18 - Rx/NET/Test/Rx/WpfXbapApp45/Page1.xaml | 14 - Rx/NET/Test/Rx/WpfXbapApp45/Page1.xaml.cs | 57 - .../Rx/WpfXbapApp45/Properties/AssemblyInfo.cs | 55 - .../WpfXbapApp45/Properties/Resources.Designer.cs | 62 - .../Test/Rx/WpfXbapApp45/Properties/Resources.resx | 117 - .../WpfXbapApp45/Properties/Settings.Designer.cs | 30 - .../Rx/WpfXbapApp45/Properties/Settings.settings | 7 - .../Test/Rx/WpfXbapApp45/Properties/app.manifest | 26 - Rx/NET/Test/Rx/WpfXbapApp45/WpfXbapApp45.csproj | 151 - .../Rx/WpfXbapApp45/WpfXbapApp45_TemporaryKey.pfx | Bin 1660 -> 0 bytes Rx/NET/Test/Rx/WpfXbapApp45_NuGet/Page1.xaml.cs | 2 +- .../WpfXbapApp45_NuGet/WpfXbapApp45_NuGet.csproj | 64 +- Rx/NET/Test/Rx/WpfXbapApp45_NuGet/packages.config | 13 +- .../Rx-Core.2.0.21030/Rx-Core.2.0.21030.nupkg | Bin 501008 -> 0 bytes .../Rx-Core.2.0.21030/Rx-Core.2.0.21030.nuspec | 25 - .../lib/Net40/System.Reactive.Core.XML | 2617 --- .../lib/Net40/System.Reactive.Core.dll | Bin 104024 -> 0 bytes .../lib/Net45/System.Reactive.Core.XML | 2873 ---- .../lib/Net45/System.Reactive.Core.dll | Bin 122440 -> 0 bytes .../System.Reactive.Core.XML | 2873 ---- .../System.Reactive.Core.dll | Bin 122440 -> 0 bytes .../SL4-WindowsPhone71/System.Reactive.Core.XML | 2516 --- .../SL4-WindowsPhone71/System.Reactive.Core.dll | Bin 103504 -> 0 bytes .../lib/SL5/System.Reactive.Core.XML | 2617 --- .../lib/SL5/System.Reactive.Core.dll | Bin 105032 -> 0 bytes .../lib/WP8/System.Reactive.Core.XML | 2873 ---- .../lib/WP8/System.Reactive.Core.dll | Bin 122440 -> 0 bytes .../lib/WinRT45/System.Reactive.Core.XML | 2873 ---- .../lib/WinRT45/System.Reactive.Core.dll | Bin 122440 -> 0 bytes .../Rx-Interfaces.2.0.21030.nupkg | Bin 122414 -> 0 bytes .../Rx-Interfaces.2.0.21030.nuspec | 21 - .../lib/Net40/System.Reactive.Interfaces.XML | 336 - .../lib/Net40/System.Reactive.Interfaces.dll | Bin 24152 -> 0 bytes .../lib/Net45/System.Reactive.Interfaces.XML | 336 - .../lib/Net45/System.Reactive.Interfaces.dll | Bin 24144 -> 0 bytes .../System.Reactive.Interfaces.XML | 336 - .../System.Reactive.Interfaces.dll | Bin 24144 -> 0 bytes .../System.Reactive.Interfaces.XML | 336 - .../System.Reactive.Interfaces.dll | Bin 24144 -> 0 bytes .../lib/SL5/System.Reactive.Interfaces.XML | 368 - .../lib/SL5/System.Reactive.Interfaces.dll | Bin 24144 -> 0 bytes .../lib/WP8/System.Reactive.Interfaces.XML | 336 - .../lib/WP8/System.Reactive.Interfaces.dll | Bin 24144 -> 0 bytes .../lib/WinRT45/System.Reactive.Interfaces.XML | 336 - .../lib/WinRT45/System.Reactive.Interfaces.dll | Bin 24144 -> 0 bytes .../Rx-Linq.2.0.21030/Rx-Linq.2.0.21030.nupkg | Bin 1796359 -> 0 bytes .../Rx-Linq.2.0.21030/Rx-Linq.2.0.21030.nuspec | 26 - .../lib/Net40/System.Reactive.Linq.XML | 10411 ------------ .../lib/Net40/System.Reactive.Linq.dll | Bin 682568 -> 0 bytes .../lib/Net45/System.Reactive.Linq.XML | 10466 ------------ .../lib/Net45/System.Reactive.Linq.dll | Bin 689232 -> 0 bytes .../System.Reactive.Linq.XML | 10466 ------------ .../System.Reactive.Linq.dll | Bin 689232 -> 0 bytes .../SL4-WindowsPhone71/System.Reactive.Linq.XML | 7488 --------- .../SL4-WindowsPhone71/System.Reactive.Linq.dll | Bin 389712 -> 0 bytes .../lib/SL5/System.Reactive.Linq.XML | 10411 ------------ .../lib/SL5/System.Reactive.Linq.dll | Bin 683080 -> 0 bytes .../lib/WP8/System.Reactive.Linq.XML | 10466 ------------ .../lib/WP8/System.Reactive.Linq.dll | Bin 689232 -> 0 bytes .../lib/WinRT45/System.Reactive.Linq.XML | 10466 ------------ .../lib/WinRT45/System.Reactive.Linq.dll | Bin 689232 -> 0 bytes .../Rx-Main.2.0.21030/Rx-Main.2.0.21030.nupkg | Bin 2750 -> 0 bytes .../Rx-Main.2.0.21030/Rx-Main.2.0.21030.nuspec | 24 - .../Rx-PlatformServices.2.0.21030.nupkg | Bin 151585 -> 0 bytes .../Rx-PlatformServices.2.0.21030.nuspec | 26 - .../content/Portable-Net45+WinRT45+WP8/Readme.txt | 16 - .../lib/Net40/System.Reactive.PlatformServices.XML | 378 - .../lib/Net40/System.Reactive.PlatformServices.dll | Bin 36944 -> 0 bytes .../lib/Net45/System.Reactive.PlatformServices.XML | 378 - .../lib/Net45/System.Reactive.PlatformServices.dll | Bin 37968 -> 0 bytes .../System.Reactive.PlatformServices.XML | 311 - .../System.Reactive.PlatformServices.dll | Bin 40016 -> 0 bytes .../lib/SL5/System.Reactive.PlatformServices.XML | 354 - .../lib/SL5/System.Reactive.PlatformServices.dll | Bin 37448 -> 0 bytes .../lib/WP8/System.Reactive.PlatformServices.XML | 378 - .../lib/WP8/System.Reactive.PlatformServices.dll | Bin 37976 -> 0 bytes .../WinRT45/System.Reactive.PlatformServices.XML | 376 - .../WinRT45/System.Reactive.PlatformServices.dll | Bin 41032 -> 0 bytes .../Rx-Providers.2.0.21030.nupkg | Bin 739296 -> 0 bytes .../Rx-Providers.2.0.21030.nuspec | 25 - .../lib/Net40/System.Reactive.Providers.XML | 9846 ------------ .../lib/Net40/System.Reactive.Providers.dll | Bin 255576 -> 0 bytes .../lib/Net45/System.Reactive.Providers.XML | 9846 ------------ .../lib/Net45/System.Reactive.Providers.dll | Bin 298568 -> 0 bytes .../System.Reactive.Providers.XML | 9846 ------------ .../System.Reactive.Providers.dll | Bin 298568 -> 0 bytes .../System.Reactive.Providers.XML | 6806 -------- .../System.Reactive.Providers.dll | Bin 143952 -> 0 bytes .../lib/SL5/System.Reactive.Providers.XML | 9846 ------------ .../lib/SL5/System.Reactive.Providers.dll | Bin 255560 -> 0 bytes .../lib/WP8/System.Reactive.Providers.XML | 9846 ------------ .../lib/WP8/System.Reactive.Providers.dll | Bin 298568 -> 0 bytes .../lib/WinRT45/System.Reactive.Providers.XML | 9846 ------------ .../lib/WinRT45/System.Reactive.Providers.dll | Bin 298568 -> 0 bytes .../Rx-Remoting.2.0.21030.nupkg | Bin 33541 -> 0 bytes .../Rx-Remoting.2.0.21030.nuspec | 21 - .../lib/Net40/System.Reactive.Runtime.Remoting.XML | 51 - .../lib/Net40/System.Reactive.Runtime.Remoting.dll | Bin 25672 -> 0 bytes .../lib/Net45/System.Reactive.Runtime.Remoting.XML | 51 - .../lib/Net45/System.Reactive.Runtime.Remoting.dll | Bin 25680 -> 0 bytes .../Rx-WinForms.2.0.21030.nupkg | Bin 35309 -> 0 bytes .../Rx-WinForms.2.0.21030.nuspec | 24 - .../lib/Net40/System.Reactive.Windows.Forms.XML | 90 - .../lib/Net40/System.Reactive.Windows.Forms.dll | Bin 25688 -> 0 bytes .../lib/Net45/System.Reactive.Windows.Forms.XML | 90 - .../lib/Net45/System.Reactive.Windows.Forms.dll | Bin 26200 -> 0 bytes .../Rx-WinRT.2.0.21030/Rx-WinRT.2.0.21030.nupkg | Bin 27072 -> 0 bytes .../Rx-WinRT.2.0.21030/Rx-WinRT.2.0.21030.nuspec | 21 - .../lib/WinRT45/System.Reactive.WindowsRuntime.XML | 312 - .../lib/WinRT45/System.Reactive.WindowsRuntime.dll | Bin 42056 -> 0 bytes .../Rx-WindowStoreApps.2.0.21030.nupkg | Bin 21619 -> 0 bytes .../Rx-WindowStoreApps.2.0.21030.nuspec | 22 - .../WinRT45/System.Reactive.Windows.Threading.XML | 256 - .../WinRT45/System.Reactive.Windows.Threading.dll | Bin 29792 -> 0 bytes .../Rx-XAML.2.0.21030/Rx-XAML.2.0.21030.nupkg | Bin 112304 -> 0 bytes .../Rx-XAML.2.0.21030/Rx-XAML.2.0.21030.nuspec | 25 - .../Net40/System.Reactive.Windows.Threading.XML | 196 - .../Net40/System.Reactive.Windows.Threading.dll | Bin 28768 -> 0 bytes .../Net45/System.Reactive.Windows.Threading.XML | 285 - .../Net45/System.Reactive.Windows.Threading.dll | Bin 30280 -> 0 bytes .../System.Reactive.Windows.Threading.XML | 196 - .../System.Reactive.Windows.Threading.dll | Bin 28752 -> 0 bytes .../lib/SL5/System.Reactive.Windows.Threading.XML | 196 - .../lib/SL5/System.Reactive.Windows.Threading.dll | Bin 28744 -> 0 bytes .../lib/WP8/System.Reactive.Windows.Threading.XML | 196 - .../lib/WP8/System.Reactive.Windows.Threading.dll | Bin 28760 -> 0 bytes .../WinRT45/System.Reactive.Windows.Threading.XML | 256 - .../WinRT45/System.Reactive.Windows.Threading.dll | Bin 29792 -> 0 bytes Rx/NET/Test/Rx/packages/repositories.config | 1 - Rx/NET/tools/HomoIcon/HomoIcon.csproj | 59 + Rx/NET/tools/HomoIcon/HomoIcon.sln | 28 + Rx/NET/tools/HomoIcon/HomoIcon.vssscc | 10 + Rx/NET/tools/HomoIcon/Program.cs | 974 ++ Rx/NET/tools/HomoIcon/Properties/AssemblyInfo.cs | 36 + 647 files changed, 80678 insertions(+), 177056 deletions(-) delete mode 100644 Ix/NET/.gitattributes delete mode 100644 Ix/NET/.gitignore create mode 100644 Ix/NET/35MSSharedLib1024.snk create mode 100644 Ix/NET/System.Interactive/IAwaitable.cs create mode 100644 Ix/NET/System.Interactive/IYielder.cs create mode 100644 Rx/NET/Resources/Artwork/Logo_Color.design create mode 100644 Rx/NET/Resources/Artwork/Logo_Color_2010x2000.psd create mode 100644 Rx/NET/Resources/Artwork/Logo_Color_300x300.png create mode 100644 Rx/NET/Samples/Portable/.nuget/NuGet.Config create mode 100644 Rx/NET/Samples/Portable/.nuget/NuGet.exe create mode 100644 Rx/NET/Samples/Portable/.nuget/NuGet.targets create mode 100644 Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Net40ConsoleApp_NuGet.csproj create mode 100644 Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Program.cs create mode 100644 Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Properties/AssemblyInfo.cs create mode 100644 Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/packages.config create mode 100644 Rx/NET/Samples/Portable/Net40ConsoleApplication/Net40ConsoleApplication.csproj create mode 100644 Rx/NET/Samples/Portable/Net40ConsoleApplication/Program.cs create mode 100644 Rx/NET/Samples/Portable/Net40ConsoleApplication/Properties/AssemblyInfo.cs create mode 100644 Rx/NET/Samples/Portable/Portable.sln create mode 100644 Rx/NET/Samples/Portable/PortableClassLibrary/PortableClass.cs create mode 100644 Rx/NET/Samples/Portable/PortableClassLibrary/PortableClassLibrary.csproj create mode 100644 Rx/NET/Samples/Portable/PortableClassLibrary/Properties/AssemblyInfo.cs create mode 100644 Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/PortableClass.cs create mode 100644 Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/PortableClassLibrary_NuGet.csproj create mode 100644 Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/Properties/AssemblyInfo.cs create mode 100644 Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/app.config create mode 100644 Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/packages.config create mode 100644 Rx/NET/Samples/Portable/SilverlightApplication/App.xaml create mode 100644 Rx/NET/Samples/Portable/SilverlightApplication/App.xaml.cs create mode 100644 Rx/NET/Samples/Portable/SilverlightApplication/MainPage.xaml create mode 100644 Rx/NET/Samples/Portable/SilverlightApplication/MainPage.xaml.cs create mode 100644 Rx/NET/Samples/Portable/SilverlightApplication/Properties/AppManifest.xml create mode 100644 Rx/NET/Samples/Portable/SilverlightApplication/Properties/AssemblyInfo.cs create mode 100644 Rx/NET/Samples/Portable/SilverlightApplication/SilverlightApplication.csproj create mode 100644 Rx/NET/Source/.nuget/NuGet.Config create mode 100644 Rx/NET/Source/.nuget/NuGet.exe create mode 100644 Rx/NET/Source/.nuget/NuGet.targets create mode 100644 Rx/NET/Source/35MSSharedLib1024.snk create mode 100644 Rx/NET/Source/System.Reactive.Core/packages.config create mode 100644 Rx/NET/Source/System.Reactive.Observable.Aliases/Observable.Aliases.cs create mode 100644 Rx/NET/Source/System.Reactive.Observable.Aliases/Qbservable.Aliases.Generated.cs create mode 100644 Rx/NET/Source/System.Reactive.Observable.Aliases/System.Reactive.Observable.Aliases.csproj create mode 100644 Rx/NET/Source/Tests.System.Reactive/Stress/Core/Schedulers/EventLoop.cs create mode 100644 Rx/NET/Source/Tests.System.Reactive/Tests/Aliases.cs create mode 100644 Rx/NET/Source/packages.config create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/License.rtf create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/Microsoft.Bcl.1.0.19.nupkg create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/Microsoft.Bcl.1.0.19.nuspec create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/ReleaseNotes.txt create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/net45/_._ create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/portable-net45+win8+wp8/_._ create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/sl4/_._ create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/sl5/_._ create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/win8/_._ create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/wp8/_._ create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Runtime.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Runtime.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Threading.Tasks.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Threading.Tasks.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/ensureRedirect.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net45/_._ create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Runtime.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Runtime.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Threading.Tasks.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Threading.Tasks.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/ensureRedirect.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Runtime.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Runtime.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Threading.Tasks.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Threading.Tasks.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/ensureRedirect.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Runtime.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Runtime.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Threading.Tasks.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Threading.Tasks.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/ensureRedirect.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Runtime.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Runtime.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Threading.Tasks.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Threading.Tasks.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/ensureRedirect.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Runtime.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Runtime.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Threading.Tasks.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Threading.Tasks.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/ensureRedirect.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Runtime.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Runtime.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Threading.Tasks.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Threading.Tasks.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/ensureRedirect.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net45+win8+wp8/_._ create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Runtime.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Runtime.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Threading.Tasks.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Threading.Tasks.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/ensureRedirect.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Runtime.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Runtime.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Threading.Tasks.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Threading.Tasks.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Runtime.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Runtime.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Threading.Tasks.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Threading.Tasks.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/win8/_._ create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/wp8/_._ create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/License.rtf create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/Microsoft.Bcl.Async.1.0.16.nupkg create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/Microsoft.Bcl.Async.1.0.16.nuspec create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/ReleaseNotes.txt create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.Desktop.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.Desktop.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.Extensions.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.Extensions.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.Extensions.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.Extensions.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.Extensions.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.Extensions.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.Extensions.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.Extensions.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.Phone.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.Phone.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.Silverlight.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.Silverlight.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.Extensions.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.Extensions.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.Phone.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.Phone.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.xml create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/License-Stable.rtf create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/Microsoft.Bcl.Build.1.0.10.nupkg create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/Microsoft.Bcl.Build.1.0.10.nuspec create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/net40/_._ create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/netcore45/_._ create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/portable-net40+win8+sl4+wp71/_._ create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/sl4-windowsphone71/_._ create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/sl4/_._ create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Install.ps1 create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Microsoft.Bcl.Build.targets create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Uninstall.ps1 create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/License.rtf create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/Microsoft.Bcl.Build.1.0.4.nupkg create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/Microsoft.Bcl.Build.1.0.4.nuspec create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/net40/_._ create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/netcore45/_._ create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/portable-net40+win8+sl4+wp71/_._ create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/sl4-windowsphone71/_._ create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/sl4/_._ create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Install.ps1 create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Microsoft.Bcl.Build.Tasks.dll create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Microsoft.Bcl.Build.targets create mode 100644 Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Uninstall.ps1 create mode 100644 Rx/NET/Source/packages/repositories.config delete mode 100644 Rx/NET/Test/Rx/SilverlightApp5/App.xaml delete mode 100644 Rx/NET/Test/Rx/SilverlightApp5/App.xaml.cs delete mode 100644 Rx/NET/Test/Rx/SilverlightApp5/MainPage.xaml delete mode 100644 Rx/NET/Test/Rx/SilverlightApp5/MainPage.xaml.cs delete mode 100644 Rx/NET/Test/Rx/SilverlightApp5/Properties/AppManifest.xml delete mode 100644 Rx/NET/Test/Rx/SilverlightApp5/Properties/AssemblyInfo.cs delete mode 100644 Rx/NET/Test/Rx/SilverlightApp5/SilverlightApp5.csproj delete mode 100644 Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/App.xaml delete mode 100644 Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/App.xaml.cs delete mode 100644 Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/MainPage.xaml delete mode 100644 Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/MainPage.xaml.cs delete mode 100644 Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/Properties/AppManifest.xml delete mode 100644 Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/Properties/AssemblyInfo.cs delete mode 100644 Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/SilverlightApp5_NoPlatformServices.csproj delete mode 100644 Rx/NET/Test/Rx/WinFormsApp45/App.config delete mode 100644 Rx/NET/Test/Rx/WinFormsApp45/Form1.Designer.cs delete mode 100644 Rx/NET/Test/Rx/WinFormsApp45/Form1.cs delete mode 100644 Rx/NET/Test/Rx/WinFormsApp45/Form1.resx delete mode 100644 Rx/NET/Test/Rx/WinFormsApp45/Program.cs delete mode 100644 Rx/NET/Test/Rx/WinFormsApp45/Properties/AssemblyInfo.cs delete mode 100644 Rx/NET/Test/Rx/WinFormsApp45/Properties/Resources.Designer.cs delete mode 100644 Rx/NET/Test/Rx/WinFormsApp45/Properties/Resources.resx delete mode 100644 Rx/NET/Test/Rx/WinFormsApp45/Properties/Settings.Designer.cs delete mode 100644 Rx/NET/Test/Rx/WinFormsApp45/Properties/Settings.settings delete mode 100644 Rx/NET/Test/Rx/WinFormsApp45/WinFormsApp45.csproj delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneAgent7/Properties/AssemblyInfo.cs delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneAgent7/ScheduledAgent.cs delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneAgent7/WindowsPhoneAgent7.csproj delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneAgent8/Properties/AssemblyInfo.cs delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneAgent8/ScheduledAgent.cs delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneAgent8/WindowsPhoneAgent8.csproj delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7/App.xaml delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7/App.xaml.cs delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7/ApplicationIcon.png delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7/Background.png delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7/MainPage.xaml delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7/MainPage.xaml.cs delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7/Properties/AppManifest.xml delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7/Properties/AssemblyInfo.cs delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7/Properties/WMAppManifest.xml delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7/SplashScreenImage.jpg delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7/WindowsPhoneApp7.csproj delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/App.xaml delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/App.xaml.cs delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/ApplicationIcon.png delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/Background.png delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/MainPage.xaml delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/MainPage.xaml.cs delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/Properties/AppManifest.xml delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/Properties/AssemblyInfo.cs delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/Properties/WMAppManifest.xml delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/SplashScreenImage.jpg delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NoPlatformServices/WindowsPhoneApp7_NoPlatformServices.csproj delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/App.xaml delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/App.xaml.cs delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/ApplicationIcon.png delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/Background.png delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/MainPage.xaml delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/MainPage.xaml.cs delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/Properties/AppManifest.xml delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/Properties/AssemblyInfo.cs delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/Properties/WMAppManifest.xml delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/SplashScreenImage.jpg delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/WindowsPhoneApp7_NuGet.csproj delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp7_NuGet/packages.config delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp8/App.xaml delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp8/App.xaml.cs delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp8/Assets/AlignmentGrid.png delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp8/Assets/ApplicationIcon.png delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp8/Assets/Tiles/FlipCycleTileLarge.png delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp8/Assets/Tiles/FlipCycleTileMedium.png delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp8/Assets/Tiles/FlipCycleTileSmall.png delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp8/Assets/Tiles/IconicTileMediumLarge.png delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp8/Assets/Tiles/IconicTileSmall.png delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp8/LocalizedStrings.cs delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp8/MainPage.xaml delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp8/MainPage.xaml.cs delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp8/Properties/AppManifest.xml delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp8/Properties/AssemblyInfo.cs delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp8/Properties/WMAppManifest.xml delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp8/Resources/AppResources.Designer.cs delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp8/Resources/AppResources.resx delete mode 100644 Rx/NET/Test/Rx/WindowsPhoneApp8/WindowsPhoneApp8.csproj delete mode 100644 Rx/NET/Test/Rx/WindowsStoreApp8/App.xaml delete mode 100644 Rx/NET/Test/Rx/WindowsStoreApp8/App.xaml.cs delete mode 100644 Rx/NET/Test/Rx/WindowsStoreApp8/Assets/Logo.png delete mode 100644 Rx/NET/Test/Rx/WindowsStoreApp8/Assets/SmallLogo.png delete mode 100644 Rx/NET/Test/Rx/WindowsStoreApp8/Assets/SplashScreen.png delete mode 100644 Rx/NET/Test/Rx/WindowsStoreApp8/Assets/StoreLogo.png delete mode 100644 Rx/NET/Test/Rx/WindowsStoreApp8/Common/StandardStyles.xaml delete mode 100644 Rx/NET/Test/Rx/WindowsStoreApp8/MainPage.xaml delete mode 100644 Rx/NET/Test/Rx/WindowsStoreApp8/MainPage.xaml.cs delete mode 100644 Rx/NET/Test/Rx/WindowsStoreApp8/Package.appxmanifest delete mode 100644 Rx/NET/Test/Rx/WindowsStoreApp8/Properties/AssemblyInfo.cs delete mode 100644 Rx/NET/Test/Rx/WindowsStoreApp8/WindowsStoreApp8.csproj delete mode 100644 Rx/NET/Test/Rx/WindowsStoreApp8/WindowsStoreApp8_TemporaryKey.pfx delete mode 100644 Rx/NET/Test/Rx/WindowsStoreApp8_NuGet/app.config delete mode 100644 Rx/NET/Test/Rx/WpfApp45/App.config delete mode 100644 Rx/NET/Test/Rx/WpfApp45/App.xaml delete mode 100644 Rx/NET/Test/Rx/WpfApp45/App.xaml.cs delete mode 100644 Rx/NET/Test/Rx/WpfApp45/MainWindow.xaml delete mode 100644 Rx/NET/Test/Rx/WpfApp45/MainWindow.xaml.cs delete mode 100644 Rx/NET/Test/Rx/WpfApp45/Properties/AssemblyInfo.cs delete mode 100644 Rx/NET/Test/Rx/WpfApp45/Properties/Resources.Designer.cs delete mode 100644 Rx/NET/Test/Rx/WpfApp45/Properties/Resources.resx delete mode 100644 Rx/NET/Test/Rx/WpfApp45/Properties/Settings.Designer.cs delete mode 100644 Rx/NET/Test/Rx/WpfApp45/Properties/Settings.settings delete mode 100644 Rx/NET/Test/Rx/WpfApp45/WpfApp45.csproj delete mode 100644 Rx/NET/Test/Rx/WpfApp45_NuGet/App.config delete mode 100644 Rx/NET/Test/Rx/WpfXbapApp45/App.xaml delete mode 100644 Rx/NET/Test/Rx/WpfXbapApp45/App.xaml.cs delete mode 100644 Rx/NET/Test/Rx/WpfXbapApp45/Page1.xaml delete mode 100644 Rx/NET/Test/Rx/WpfXbapApp45/Page1.xaml.cs delete mode 100644 Rx/NET/Test/Rx/WpfXbapApp45/Properties/AssemblyInfo.cs delete mode 100644 Rx/NET/Test/Rx/WpfXbapApp45/Properties/Resources.Designer.cs delete mode 100644 Rx/NET/Test/Rx/WpfXbapApp45/Properties/Resources.resx delete mode 100644 Rx/NET/Test/Rx/WpfXbapApp45/Properties/Settings.Designer.cs delete mode 100644 Rx/NET/Test/Rx/WpfXbapApp45/Properties/Settings.settings delete mode 100644 Rx/NET/Test/Rx/WpfXbapApp45/Properties/app.manifest delete mode 100644 Rx/NET/Test/Rx/WpfXbapApp45/WpfXbapApp45.csproj delete mode 100644 Rx/NET/Test/Rx/WpfXbapApp45/WpfXbapApp45_TemporaryKey.pfx delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/Rx-Core.2.0.21030.nupkg delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/Rx-Core.2.0.21030.nuspec delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/lib/Net40/System.Reactive.Core.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/lib/Net40/System.Reactive.Core.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/lib/Net45/System.Reactive.Core.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/lib/Net45/System.Reactive.Core.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/lib/Portable-Net45+WinRT45+WP8/System.Reactive.Core.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/lib/Portable-Net45+WinRT45+WP8/System.Reactive.Core.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/lib/SL4-WindowsPhone71/System.Reactive.Core.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/lib/SL4-WindowsPhone71/System.Reactive.Core.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/lib/SL5/System.Reactive.Core.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/lib/SL5/System.Reactive.Core.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/lib/WP8/System.Reactive.Core.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/lib/WP8/System.Reactive.Core.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/lib/WinRT45/System.Reactive.Core.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Core.2.0.21030/lib/WinRT45/System.Reactive.Core.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/Rx-Interfaces.2.0.21030.nupkg delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/Rx-Interfaces.2.0.21030.nuspec delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/lib/Net40/System.Reactive.Interfaces.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/lib/Net40/System.Reactive.Interfaces.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/lib/Net45/System.Reactive.Interfaces.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/lib/Net45/System.Reactive.Interfaces.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/lib/Portable-Net45+WinRT45+WP8/System.Reactive.Interfaces.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/lib/Portable-Net45+WinRT45+WP8/System.Reactive.Interfaces.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/lib/SL4-WindowsPhone71/System.Reactive.Interfaces.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/lib/SL4-WindowsPhone71/System.Reactive.Interfaces.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/lib/SL5/System.Reactive.Interfaces.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/lib/SL5/System.Reactive.Interfaces.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/lib/WP8/System.Reactive.Interfaces.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/lib/WP8/System.Reactive.Interfaces.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/lib/WinRT45/System.Reactive.Interfaces.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Interfaces.2.0.21030/lib/WinRT45/System.Reactive.Interfaces.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/Rx-Linq.2.0.21030.nupkg delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/Rx-Linq.2.0.21030.nuspec delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/lib/Net40/System.Reactive.Linq.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/lib/Net40/System.Reactive.Linq.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/lib/Net45/System.Reactive.Linq.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/lib/Net45/System.Reactive.Linq.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/lib/Portable-Net45+WinRT45+WP8/System.Reactive.Linq.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/lib/Portable-Net45+WinRT45+WP8/System.Reactive.Linq.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/lib/SL4-WindowsPhone71/System.Reactive.Linq.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/lib/SL4-WindowsPhone71/System.Reactive.Linq.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/lib/SL5/System.Reactive.Linq.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/lib/SL5/System.Reactive.Linq.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/lib/WP8/System.Reactive.Linq.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/lib/WP8/System.Reactive.Linq.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/lib/WinRT45/System.Reactive.Linq.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Linq.2.0.21030/lib/WinRT45/System.Reactive.Linq.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Main.2.0.21030/Rx-Main.2.0.21030.nupkg delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Main.2.0.21030/Rx-Main.2.0.21030.nuspec delete mode 100644 Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/Rx-PlatformServices.2.0.21030.nupkg delete mode 100644 Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/Rx-PlatformServices.2.0.21030.nuspec delete mode 100644 Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/content/Portable-Net45+WinRT45+WP8/Readme.txt delete mode 100644 Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/lib/Net40/System.Reactive.PlatformServices.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/lib/Net40/System.Reactive.PlatformServices.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/lib/Net45/System.Reactive.PlatformServices.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/lib/Net45/System.Reactive.PlatformServices.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/lib/SL4-WindowsPhone71/System.Reactive.PlatformServices.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/lib/SL4-WindowsPhone71/System.Reactive.PlatformServices.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/lib/SL5/System.Reactive.PlatformServices.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/lib/SL5/System.Reactive.PlatformServices.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/lib/WP8/System.Reactive.PlatformServices.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/lib/WP8/System.Reactive.PlatformServices.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/lib/WinRT45/System.Reactive.PlatformServices.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-PlatformServices.2.0.21030/lib/WinRT45/System.Reactive.PlatformServices.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/Rx-Providers.2.0.21030.nupkg delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/Rx-Providers.2.0.21030.nuspec delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/lib/Net40/System.Reactive.Providers.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/lib/Net40/System.Reactive.Providers.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/lib/Net45/System.Reactive.Providers.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/lib/Net45/System.Reactive.Providers.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/lib/Portable-Net45+WinRT45+WP8/System.Reactive.Providers.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/lib/Portable-Net45+WinRT45+WP8/System.Reactive.Providers.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/lib/SL4-WindowsPhone71/System.Reactive.Providers.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/lib/SL4-WindowsPhone71/System.Reactive.Providers.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/lib/SL5/System.Reactive.Providers.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/lib/SL5/System.Reactive.Providers.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/lib/WP8/System.Reactive.Providers.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/lib/WP8/System.Reactive.Providers.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/lib/WinRT45/System.Reactive.Providers.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Providers.2.0.21030/lib/WinRT45/System.Reactive.Providers.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Remoting.2.0.21030/Rx-Remoting.2.0.21030.nupkg delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Remoting.2.0.21030/Rx-Remoting.2.0.21030.nuspec delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Remoting.2.0.21030/lib/Net40/System.Reactive.Runtime.Remoting.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Remoting.2.0.21030/lib/Net40/System.Reactive.Runtime.Remoting.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Remoting.2.0.21030/lib/Net45/System.Reactive.Runtime.Remoting.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-Remoting.2.0.21030/lib/Net45/System.Reactive.Runtime.Remoting.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-WinForms.2.0.21030/Rx-WinForms.2.0.21030.nupkg delete mode 100644 Rx/NET/Test/Rx/packages/Rx-WinForms.2.0.21030/Rx-WinForms.2.0.21030.nuspec delete mode 100644 Rx/NET/Test/Rx/packages/Rx-WinForms.2.0.21030/lib/Net40/System.Reactive.Windows.Forms.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-WinForms.2.0.21030/lib/Net40/System.Reactive.Windows.Forms.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-WinForms.2.0.21030/lib/Net45/System.Reactive.Windows.Forms.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-WinForms.2.0.21030/lib/Net45/System.Reactive.Windows.Forms.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-WinRT.2.0.21030/Rx-WinRT.2.0.21030.nupkg delete mode 100644 Rx/NET/Test/Rx/packages/Rx-WinRT.2.0.21030/Rx-WinRT.2.0.21030.nuspec delete mode 100644 Rx/NET/Test/Rx/packages/Rx-WinRT.2.0.21030/lib/WinRT45/System.Reactive.WindowsRuntime.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-WinRT.2.0.21030/lib/WinRT45/System.Reactive.WindowsRuntime.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-WindowStoreApps.2.0.21030/Rx-WindowStoreApps.2.0.21030.nupkg delete mode 100644 Rx/NET/Test/Rx/packages/Rx-WindowStoreApps.2.0.21030/Rx-WindowStoreApps.2.0.21030.nuspec delete mode 100644 Rx/NET/Test/Rx/packages/Rx-WindowStoreApps.2.0.21030/lib/WinRT45/System.Reactive.Windows.Threading.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-WindowStoreApps.2.0.21030/lib/WinRT45/System.Reactive.Windows.Threading.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/Rx-XAML.2.0.21030.nupkg delete mode 100644 Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/Rx-XAML.2.0.21030.nuspec delete mode 100644 Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/lib/Net40/System.Reactive.Windows.Threading.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/lib/Net40/System.Reactive.Windows.Threading.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/lib/Net45/System.Reactive.Windows.Threading.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/lib/Net45/System.Reactive.Windows.Threading.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/lib/SL4-WindowsPhone71/System.Reactive.Windows.Threading.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/lib/SL4-WindowsPhone71/System.Reactive.Windows.Threading.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/lib/SL5/System.Reactive.Windows.Threading.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/lib/SL5/System.Reactive.Windows.Threading.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/lib/WP8/System.Reactive.Windows.Threading.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/lib/WP8/System.Reactive.Windows.Threading.dll delete mode 100644 Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/lib/WinRT45/System.Reactive.Windows.Threading.XML delete mode 100644 Rx/NET/Test/Rx/packages/Rx-XAML.2.0.21030/lib/WinRT45/System.Reactive.Windows.Threading.dll create mode 100644 Rx/NET/tools/HomoIcon/HomoIcon.csproj create mode 100644 Rx/NET/tools/HomoIcon/HomoIcon.sln create mode 100644 Rx/NET/tools/HomoIcon/HomoIcon.vssscc create mode 100644 Rx/NET/tools/HomoIcon/Program.cs create mode 100644 Rx/NET/tools/HomoIcon/Properties/AssemblyInfo.cs diff --git a/Ix/NET/.gitattributes b/Ix/NET/.gitattributes deleted file mode 100644 index 412eeda..0000000 --- a/Ix/NET/.gitattributes +++ /dev/null @@ -1,22 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto - -# Custom for Visual Studio -*.cs diff=csharp -*.sln merge=union -*.csproj merge=union -*.vbproj merge=union -*.fsproj merge=union -*.dbproj merge=union - -# Standard to msysgit -*.doc diff=astextplain -*.DOC diff=astextplain -*.docx diff=astextplain -*.DOCX diff=astextplain -*.dot diff=astextplain -*.DOT diff=astextplain -*.pdf diff=astextplain -*.PDF diff=astextplain -*.rtf diff=astextplain -*.RTF diff=astextplain diff --git a/Ix/NET/.gitignore b/Ix/NET/.gitignore deleted file mode 100644 index 5ebd21a..0000000 --- a/Ix/NET/.gitignore +++ /dev/null @@ -1,163 +0,0 @@ -################# -## Eclipse -################# - -*.pydevproject -.project -.metadata -bin/ -tmp/ -*.tmp -*.bak -*.swp -*~.nib -local.properties -.classpath -.settings/ -.loadpath - -# External tool builders -.externalToolBuilders/ - -# Locally stored "Eclipse launch configurations" -*.launch - -# CDT-specific -.cproject - -# PDT-specific -.buildpath - - -################# -## Visual Studio -################# - -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. - -# User-specific files -*.suo -*.user -*.sln.docstates - -# Build results -[Dd]ebug/ -[Rr]elease/ -*_i.c -*_p.c -*.ilk -*.meta -*.obj -*.pch -*.pdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.vspscc -.builds -*.dotCover - -## TODO: If you have NuGet Package Restore enabled, uncomment this -#packages/ - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opensdf -*.sdf - -# Visual Studio profiler -*.psess -*.vsp - -# ReSharper is a .NET coding add-in -_ReSharper* - -# Installshield output folder -[Ee]xpress - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish - -# Others -[Bb]in -[Oo]bj -sql -TestResults -*.Cache -ClientBin -stylecop.* -~$* -*.dbmdl -Generated_Code #added for RIA/Silverlight projects - -# Backup & report files from converting an old project file to a newer -# Visual Studio version. Backup files are not needed, because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML - - - -############ -## Windows -############ - -# Windows image file caches -Thumbs.db - -# Folder config file -Desktop.ini - - -############# -## Python -############# - -*.py[co] - -# Packages -*.egg -*.egg-info -dist -build -eggs -parts -bin -var -sdist -develop-eggs -.installed.cfg - -# Installer logs -pip-log.txt - -# Unit test / coverage reports -.coverage -.tox - -#Translations -*.mo - -#Mr Developer -.mr.developer.cfg - -# Mac crap -.DS_Store diff --git a/Ix/NET/35MSSharedLib1024.snk b/Ix/NET/35MSSharedLib1024.snk new file mode 100644 index 0000000..695f1b3 Binary files /dev/null and b/Ix/NET/35MSSharedLib1024.snk differ diff --git a/Ix/NET/Common.targets b/Ix/NET/Common.targets index 032880f..fc61adf 100644 --- a/Ix/NET/Common.targets +++ b/Ix/NET/Common.targets @@ -1,180 +1,207 @@ - AnyCPU + Debug 8.0.30703 2.0 + + + + + Debug + PL + + + Release + PL + + + + Debug + 45 + + + Release + 45 + - true - full - false - bin\Debug40\ - $(DefineConstants);TRACE;DEBUG - prompt - 4 - v4.0 - DESKTOPCLR - DESKTOPCLR40 + Debug + 40 - pdbonly - true - bin\Release40\ - $(DefineConstants);TRACE - prompt - 4 - v4.0 + Release + 40 + + + + + + Debug + 35 + + + Release + 35 + + + + Debug + SL5 + + + Release + SL5 + + + + Debug + WP7 + + + Release + WP7 + + + + + + + $(DefineConstants);HAS_AWAIT + .NETPortable + v4.5 + Profile78 + true + DESKTOPCLR45 + + + + $(DefineConstants);HAS_AWAIT;HAS_APTCA + v4.5 + true DESKTOPCLR - DESKTOPCLR40 + DESKTOPCLR45 + + + $(DefineConstants);HAS_AWAIT;HAS_APTCA;PORTABLE + v4.5 + true + DESKTOPCLR + DESKTOPCLR45 + - - true - full - false - bin\Debug35\ - $(DefineConstants);TRACE;DEBUG;NO_VARIANCE;NO_TPL;NO_LARGEARITY;NO_RXINTERFACES;NO_ZIP - prompt - 4 - v3.5 + + + $(DefineConstants);HAS_APTCA + v4.0 DESKTOPCLR - DESKTOPCLR20 + DESKTOPCLR40 - - pdbonly - true - bin\Release35\ - $(DefineConstants);TRACE;NO_VARIANCE;NO_TPL;NO_LARGEARITY;NO_RXINTERFACES;NO_ZIP - prompt - 4 + + + $(DefineConstants);NO_VARIANCE;NO_TPL;NO_LARGEARITY;NO_RXINTERFACES;NO_ZIP;HAS_APTCA v3.5 DESKTOPCLR DESKTOPCLR20 - - true - full - false - bin\DebugSL4\ - $(DefineConstants);TRACE;DEBUG;NO_SERIALIZABLE;NO_TPL;NO_REMOTING;NO_SEMAPHORE;NO_RXINTERFACES - prompt - 4 + + $(DefineConstants);NO_SERIALIZABLE;NO_TPL;NO_REMOTING;NO_SEMAPHORE;NO_RXINTERFACES Silverlight - v4.0 + v5.0 $(TargetFrameworkVersion) false SILVERLIGHT - SILVERLIGHT4 + SILVERLIGHT5 - - pdbonly - true - bin\ReleaseSL4\ - $(DefineConstants);TRACE;NO_SERIALIZABLE;NO_TPL;NO_REMOTING;NO_SEMAPHORE;NO_RXINTERFACES - prompt - 4 + + + $(DefineConstants);WINDOWSPHONE7;NO_TLS;NO_VARIANCE;NO_SERIALIZABLE;NO_TPL;NO_HASHSET;NO_REMOTING;NO_SEMAPHORE;NO_LARGEARITY;NO_ZIP + WindowsPhone71 Silverlight v4.0 $(TargetFrameworkVersion) false SILVERLIGHT - SILVERLIGHT4 - - - true - full - false - bin\DebugSL5\ - $(DefineConstants);TRACE;DEBUG;NO_SERIALIZABLE;NO_TPL;NO_REMOTING;NO_SEMAPHORE;NO_RXINTERFACES - prompt - 4 - Silverlight - v5.0 - $(TargetFrameworkVersion) - false - SILVERLIGHT - SILVERLIGHT5 + SILVERLIGHTM7 - - pdbonly - true - bin\ReleaseSL5\ - $(DefineConstants);TRACE;NO_SERIALIZABLE;NO_TPL;NO_REMOTING;NO_SEMAPHORE;NO_RXINTERFACES + + + + + + + + + $(DefineConstants);$(BuildPlatform);$(BuildFlavor);TRACE + ..\bin\$(BuildConfig)$(BuildTarget) prompt 4 - Silverlight - v5.0 - $(TargetFrameworkVersion) - false - SILVERLIGHT - SILVERLIGHT5 + 1591 + false - + + true full false - bin\DebugWP7\ - $(DefineConstants);TRACE;DEBUG;WINDOWSPHONE7;NO_TLS;NO_VARIANCE;NO_SERIALIZABLE;NO_TPL;NO_HASHSET;NO_REMOTING;NO_SEMAPHORE;NO_LARGEARITY;NO_ZIP - prompt - 4 - WindowsPhone - Silverlight - v4.0 - $(TargetFrameworkVersion) - false - SILVERLIGHT - SILVERLIGHTM7 + $(DefineConstants);DEBUG - + + + pdbonly true - bin\ReleaseWP7\ - $(DefineConstants);TRACE;WINDOWSPHONE7;NO_TLS;NO_VARIANCE;NO_SERIALIZABLE;NO_TPL;NO_HASHSET;NO_REMOTING;NO_SEMAPHORE;NO_LARGEARITY;NO_ZIP - prompt - 4 - WindowsPhone - Silverlight - v4.0 - $(TargetFrameworkVersion) - false - SILVERLIGHT - SILVERLIGHTM7 - - $(DefineConstants);$(BuildPlatform);$(BuildFlavor) + + $(DefineConstants);NO_PERF - - $(DefineConstants);STABLE - + + + - - $(DefineConstants);SIGNED - true - ..\35MSSharedLib1024.snk - true - + + + $(DefineConstants);NO_CODECOVERAGE - - - CP_SetBuildReferencePath + + + $(DefineConstants);SIGNED + ..\35MSSharedLib1024.snk + 72 + true + true - - - $(ProjectDir)..\..\..\References\$(BuildFlavor) - - - + + + CP_SetBuildReferencePath + + + + $(ProjectDir)..\..\References\$(BuildFlavor) + + + \ No newline at end of file diff --git a/Ix/NET/Import.targets b/Ix/NET/Import.targets index fb23483..1a23c44 100644 --- a/Ix/NET/Import.targets +++ b/Ix/NET/Import.targets @@ -1,16 +1,32 @@ + - + + + + + - - + + + + - - - + + + + + diff --git a/Ix/NET/Interactive Extensions.sln b/Ix/NET/Interactive Extensions.sln index 5fbfed0..4e856ca 100644 --- a/Ix/NET/Interactive Extensions.sln +++ b/Ix/NET/Interactive Extensions.sln @@ -22,309 +22,123 @@ Global EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU - Debug|Mixed Platforms = Debug|Mixed Platforms - Debug|x86 = Debug|x86 Debug35|Any CPU = Debug35|Any CPU - Debug35|Mixed Platforms = Debug35|Mixed Platforms - Debug35|x86 = Debug35|x86 Debug40|Any CPU = Debug40|Any CPU - Debug40|Mixed Platforms = Debug40|Mixed Platforms - Debug40|x86 = Debug40|x86 + Debug45|Any CPU = Debug45|Any CPU DebugPL|Any CPU = DebugPL|Any CPU - DebugPL|Mixed Platforms = DebugPL|Mixed Platforms - DebugPL|x86 = DebugPL|x86 - DebugSL4|Any CPU = DebugSL4|Any CPU - DebugSL4|Mixed Platforms = DebugSL4|Mixed Platforms - DebugSL4|x86 = DebugSL4|x86 DebugSL5|Any CPU = DebugSL5|Any CPU - DebugSL5|Mixed Platforms = DebugSL5|Mixed Platforms - DebugSL5|x86 = DebugSL5|x86 DebugWP7|Any CPU = DebugWP7|Any CPU - DebugWP7|Mixed Platforms = DebugWP7|Mixed Platforms - DebugWP7|x86 = DebugWP7|x86 Release|Any CPU = Release|Any CPU - Release|Mixed Platforms = Release|Mixed Platforms - Release|x86 = Release|x86 Release35|Any CPU = Release35|Any CPU - Release35|Mixed Platforms = Release35|Mixed Platforms - Release35|x86 = Release35|x86 Release40|Any CPU = Release40|Any CPU - Release40|Mixed Platforms = Release40|Mixed Platforms - Release40|x86 = Release40|x86 + Release45|Any CPU = Release45|Any CPU ReleasePL|Any CPU = ReleasePL|Any CPU - ReleasePL|Mixed Platforms = ReleasePL|Mixed Platforms - ReleasePL|x86 = ReleasePL|x86 - ReleaseSL4|Any CPU = ReleaseSL4|Any CPU - ReleaseSL4|Mixed Platforms = ReleaseSL4|Mixed Platforms - ReleaseSL4|x86 = ReleaseSL4|x86 ReleaseSL5|Any CPU = ReleaseSL5|Any CPU - ReleaseSL5|Mixed Platforms = ReleaseSL5|Mixed Platforms - ReleaseSL5|x86 = ReleaseSL5|x86 ReleaseWP7|Any CPU = ReleaseWP7|Any CPU - ReleaseWP7|Mixed Platforms = ReleaseWP7|Mixed Platforms - ReleaseWP7|x86 = ReleaseWP7|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug|Any CPU.ActiveCfg = Debug45|Any CPU + {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug|Any CPU.Build.0 = Debug45|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug35|Any CPU.Build.0 = Debug35|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug35|Mixed Platforms.Build.0 = Debug35|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug35|x86.ActiveCfg = Debug35|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug40|Any CPU.Build.0 = Debug40|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug40|x86.ActiveCfg = Debug40|Any CPU + {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU + {8E4B04F0-915E-48F9-9796-76278C6094BD}.Debug45|Any CPU.Build.0 = Debug45|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugSL5|Mixed Platforms.Build.0 = DebugSL5|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release|Any CPU.ActiveCfg = Release45|Any CPU + {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release|Any CPU.Build.0 = Release45|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release35|Any CPU.Build.0 = Release35|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release35|Mixed Platforms.Build.0 = Release35|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release35|x86.ActiveCfg = Release35|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release40|Any CPU.ActiveCfg = Release40|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release40|Any CPU.Build.0 = Release40|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release40|x86.ActiveCfg = Release40|Any CPU + {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release45|Any CPU.ActiveCfg = Release45|Any CPU + {8E4B04F0-915E-48F9-9796-76278C6094BD}.Release45|Any CPU.Build.0 = Release45|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseSL4|Mixed Platforms.Build.0 = ReleaseSL4|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseSL5|Mixed Platforms.Build.0 = ReleaseSL5|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU - {8E4B04F0-915E-48F9-9796-76278C6094BD}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug|Any CPU.ActiveCfg = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug|Any CPU.Build.0 = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug|Mixed Platforms.Build.0 = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug|x86.ActiveCfg = DebugWP7|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug|Any CPU.ActiveCfg = Debug45|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug|Any CPU.Build.0 = Debug45|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug35|Any CPU.Build.0 = Debug35|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug35|Mixed Platforms.Build.0 = Debug35|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug35|x86.ActiveCfg = Debug35|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug40|Any CPU.Build.0 = Debug40|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug40|x86.ActiveCfg = Debug40|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugPL|Any CPU.ActiveCfg = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugPL|Any CPU.Build.0 = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugPL|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugPL|Mixed Platforms.Build.0 = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugPL|x86.ActiveCfg = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Debug45|Any CPU.Build.0 = Debug45|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugPL|Any CPU.ActiveCfg = TestPL|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugPL|Any CPU.Build.0 = TestPL|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugSL5|Mixed Platforms.Build.0 = DebugSL5|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release|Any CPU.ActiveCfg = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release|Any CPU.Build.0 = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release|x86.ActiveCfg = ReleaseWP7|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release|Any CPU.ActiveCfg = Release45|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release|Any CPU.Build.0 = Release45|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release35|Any CPU.Build.0 = Release35|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release35|Mixed Platforms.Build.0 = Release35|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release35|x86.ActiveCfg = Release35|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release40|Any CPU.ActiveCfg = Release40|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release40|Any CPU.Build.0 = Release40|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release40|x86.ActiveCfg = Release40|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleasePL|Any CPU.ActiveCfg = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleasePL|Any CPU.Build.0 = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleasePL|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleasePL|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleasePL|x86.ActiveCfg = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseSL4|Mixed Platforms.Build.0 = ReleaseSL4|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release45|Any CPU.ActiveCfg = Release45|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.Release45|Any CPU.Build.0 = Release45|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleasePL|Any CPU.ActiveCfg = TestPL|Any CPU + {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleasePL|Any CPU.Build.0 = TestPL|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseSL5|Mixed Platforms.Build.0 = ReleaseSL5|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU - {C4C8532A-F8D2-428B-962E-FD578A1E647C}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug|Any CPU.ActiveCfg = Debug45|Any CPU + {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug|Any CPU.Build.0 = Debug45|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug35|Any CPU.Build.0 = Debug35|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug35|Mixed Platforms.Build.0 = Debug35|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug35|x86.ActiveCfg = Debug35|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug40|Any CPU.Build.0 = Debug40|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug40|x86.ActiveCfg = Debug40|Any CPU + {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU + {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Debug45|Any CPU.Build.0 = Debug45|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugSL5|Any CPU.Build.0 = DebugSL5|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugSL5|Mixed Platforms.Build.0 = DebugSL5|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release|Any CPU.ActiveCfg = Release45|Any CPU + {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release|Any CPU.Build.0 = Release45|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release35|Any CPU.Build.0 = Release35|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release35|Mixed Platforms.Build.0 = Release35|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release35|x86.ActiveCfg = Release35|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release40|Any CPU.ActiveCfg = Release40|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release40|Any CPU.Build.0 = Release40|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release40|x86.ActiveCfg = Release40|Any CPU + {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release45|Any CPU.ActiveCfg = Release45|Any CPU + {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.Release45|Any CPU.Build.0 = Release45|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseSL4|Mixed Platforms.Build.0 = ReleaseSL4|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseSL5|Mixed Platforms.Build.0 = ReleaseSL5|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU - {6D62E966-469D-4A99-BD43-0A17FA14FB4F}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug|Any CPU.ActiveCfg = Debug45|Any CPU + {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug|Any CPU.Build.0 = Debug45|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug35|x86.ActiveCfg = Debug35|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug40|Any CPU.Build.0 = Debug40|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug40|x86.ActiveCfg = Debug40|Any CPU + {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU + {7269A578-326A-4C3E-9874-A2D2600095BC}.Debug45|Any CPU.Build.0 = Debug45|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {7269A578-326A-4C3E-9874-A2D2600095BC}.Release|Any CPU.ActiveCfg = Release45|Any CPU + {7269A578-326A-4C3E-9874-A2D2600095BC}.Release|Any CPU.Build.0 = Release45|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.Release35|Any CPU.ActiveCfg = Release35|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Release35|x86.ActiveCfg = Release35|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.Release40|Any CPU.ActiveCfg = Release40|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.Release40|Any CPU.Build.0 = Release40|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.Release40|x86.ActiveCfg = Release40|Any CPU + {7269A578-326A-4C3E-9874-A2D2600095BC}.Release45|Any CPU.ActiveCfg = Release45|Any CPU + {7269A578-326A-4C3E-9874-A2D2600095BC}.Release45|Any CPU.Build.0 = Release45|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU - {7269A578-326A-4C3E-9874-A2D2600095BC}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Ix/NET/System.Interactive.Async/IAsyncEnumerable.cs b/Ix/NET/System.Interactive.Async/IAsyncEnumerable.cs index 8d892e1..d6c9874 100644 --- a/Ix/NET/System.Interactive.Async/IAsyncEnumerable.cs +++ b/Ix/NET/System.Interactive.Async/IAsyncEnumerable.cs @@ -9,8 +9,8 @@ namespace System.Collections.Generic /// /// Element type. public interface IAsyncEnumerable< -#if DESKTOPCLR40 || SILVERLIGHT4 - out +#if !NO_VARIANCE +out #endif T> { diff --git a/Ix/NET/System.Interactive.Async/IAsyncEnumerator.cs b/Ix/NET/System.Interactive.Async/IAsyncEnumerator.cs index 72cfdbc..d0f0c2b 100644 --- a/Ix/NET/System.Interactive.Async/IAsyncEnumerator.cs +++ b/Ix/NET/System.Interactive.Async/IAsyncEnumerator.cs @@ -11,8 +11,8 @@ namespace System.Collections.Generic /// /// Element type. public interface IAsyncEnumerator< -#if DESKTOPCLR40 || SILVERLIGHT4 - out +#if !NO_VARIANCE +out #endif T> : IDisposable { diff --git a/Ix/NET/System.Interactive.Async/IAsyncGrouping.cs b/Ix/NET/System.Interactive.Async/IAsyncGrouping.cs index 61abc60..39a5d73 100644 --- a/Ix/NET/System.Interactive.Async/IAsyncGrouping.cs +++ b/Ix/NET/System.Interactive.Async/IAsyncGrouping.cs @@ -5,11 +5,11 @@ using System.Collections.Generic; namespace System.Linq { public interface IAsyncGrouping< -#if DESKTOPCLR4 || SILVERLIGHT4 +#if !NO_VARIANCE out #endif TKey, -#if DESKTOPCLR4 || SILVERLIGHT4 +#if !NO_VARIANCE out #endif TElement> : IAsyncEnumerable diff --git a/Ix/NET/System.Interactive.Async/IOrderedAsyncEnumerable.cs b/Ix/NET/System.Interactive.Async/IOrderedAsyncEnumerable.cs index a1e430d..bfac7f5 100644 --- a/Ix/NET/System.Interactive.Async/IOrderedAsyncEnumerable.cs +++ b/Ix/NET/System.Interactive.Async/IOrderedAsyncEnumerable.cs @@ -5,8 +5,8 @@ using System.Collections.Generic; namespace System.Linq { public interface IOrderedAsyncEnumerable< -#if DESKTOPCLR4 || SILVERLIGHT4 - out +#if !NO_VARIANCE +out #endif TElement> : IAsyncEnumerable { diff --git a/Ix/NET/System.Interactive.Async/Properties/AssemblyInfo.cs b/Ix/NET/System.Interactive.Async/Properties/AssemblyInfo.cs index b887de0..7f41c3a 100644 --- a/Ix/NET/System.Interactive.Async/Properties/AssemblyInfo.cs +++ b/Ix/NET/System.Interactive.Async/Properties/AssemblyInfo.cs @@ -12,13 +12,9 @@ using System.Security; #else [assembly: AssemblyConfiguration("Retail")] #endif -[assembly: AssemblyCompany("Microsoft Corporation")] -#if STABLE +[assembly: AssemblyCompany("Microsoft Open Technologies, Inc.")] [assembly: AssemblyProduct("Interactive Extensions")] -#else -[assembly: AssemblyProduct("Interactive Extensions (Experimental Release)")] -#endif -[assembly: AssemblyCopyright("\x00a9 Microsoft Corporation. All rights reserved.")] +[assembly: AssemblyCopyright("\x00a9 Microsoft Open Technologies, Inc. All rights reserved.")] [assembly: NeutralResourcesLanguage("en-US")] #if !PLIB @@ -27,11 +23,15 @@ using System.Security; [assembly: CLSCompliant(true)] -#if DESKTOPCLR && NO_CODECOVERAGE +#if HAS_APTCA && NO_CODECOVERAGE [assembly: AllowPartiallyTrustedCallers] #endif -// -// Note: Assembly (file) version numbers get inserted by the build system on the fly. Inspect the Team Build workflows -// and the custom activity in Build/Source/Activities/AppendVersionInfo.cs for more information. -// +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== + +[assembly: AssemblyVersion("1.2.0.0")] +[assembly: AssemblyFileVersion("1.2.0.0")] +[assembly: AssemblyInformationalVersion("1.2.0.0")] diff --git a/Ix/NET/System.Interactive.Async/System.Interactive.Async.csproj b/Ix/NET/System.Interactive.Async/System.Interactive.Async.csproj index b8143b2..04d8508 100644 --- a/Ix/NET/System.Interactive.Async/System.Interactive.Async.csproj +++ b/Ix/NET/System.Interactive.Async/System.Interactive.Async.csproj @@ -12,16 +12,15 @@ System.Interactive.Async v4.0 512 + 1591 + true $(OutputPath)\$(AssemblyName).XML - - Profile1 - - + diff --git a/Ix/NET/System.Interactive.Providers/Properties/AssemblyInfo.cs b/Ix/NET/System.Interactive.Providers/Properties/AssemblyInfo.cs index 03b49a8..c230008 100644 --- a/Ix/NET/System.Interactive.Providers/Properties/AssemblyInfo.cs +++ b/Ix/NET/System.Interactive.Providers/Properties/AssemblyInfo.cs @@ -12,13 +12,9 @@ using System.Security; #else [assembly: AssemblyConfiguration("Retail")] #endif -[assembly: AssemblyCompany("Microsoft Corporation")] -#if STABLE +[assembly: AssemblyCompany("Microsoft Open Technologies, Inc.")] [assembly: AssemblyProduct("Interactive Extensions")] -#else -[assembly: AssemblyProduct("Interactive Extensions (Experimental Release)")] -#endif -[assembly: AssemblyCopyright("\x00a9 Microsoft Corporation. All rights reserved.")] +[assembly: AssemblyCopyright("\x00a9 Microsoft Open Technologies, Inc. All rights reserved.")] [assembly: NeutralResourcesLanguage("en-US")] #if !PLIB @@ -27,11 +23,16 @@ using System.Security; [assembly: CLSCompliant(true)] -#if DESKTOPCLR && NO_CODECOVERAGE +#if HAS_APTCA && NO_CODECOVERAGE [assembly: AllowPartiallyTrustedCallers] #endif -// -// Note: Assembly (file) version numbers get inserted by the build system on the fly. Inspect the Team Build workflows -// and the custom activity in Build/Source/Activities/AppendVersionInfo.cs for more information. -// + +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== + +[assembly: AssemblyVersion("1.2.0.0")] +[assembly: AssemblyFileVersion("1.2.0.0")] +[assembly: AssemblyInformationalVersion("1.2.0.0")] diff --git a/Ix/NET/System.Interactive.Providers/System.Interactive.Providers.csproj b/Ix/NET/System.Interactive.Providers/System.Interactive.Providers.csproj index 839f290..002b6ea 100644 --- a/Ix/NET/System.Interactive.Providers/System.Interactive.Providers.csproj +++ b/Ix/NET/System.Interactive.Providers/System.Interactive.Providers.csproj @@ -13,19 +13,17 @@ v4.0 512 true + 1591 + $(OutputPath)\$(AssemblyName).XML - - Profile1 - - + - diff --git a/Ix/NET/System.Interactive/EnumerableEx.Creation.cs b/Ix/NET/System.Interactive/EnumerableEx.Creation.cs index 2ba4f16..3bfa3a3 100644 --- a/Ix/NET/System.Interactive/EnumerableEx.Creation.cs +++ b/Ix/NET/System.Interactive/EnumerableEx.Creation.cs @@ -20,6 +20,17 @@ namespace System.Linq return new AnonymousEnumerable(getEnumerator); } +#if HAS_AWAIT + public static IEnumerable Create(Action> create) + { + if (create == null) + throw new ArgumentNullException("create"); + + foreach (var x in new Yielder(create)) + yield return x; + } +#endif + class AnonymousEnumerable : IEnumerable { private readonly Func> _getEnumerator; diff --git a/Ix/NET/System.Interactive/IAwaitable.cs b/Ix/NET/System.Interactive/IAwaitable.cs new file mode 100644 index 0000000..87f7ecf --- /dev/null +++ b/Ix/NET/System.Interactive/IAwaitable.cs @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. +#if HAS_AWAIT +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Runtime.CompilerServices; +using System.Threading; +using System.Threading.Tasks; + +namespace System.Linq +{ + public interface IAwaitable + { + IAwaiter GetAwaiter(); + } + + public interface IAwaiter : ICriticalNotifyCompletion + { + bool IsCompleted { get; } + void GetResult(); + } +} +#endif \ No newline at end of file diff --git a/Ix/NET/System.Interactive/IYielder.cs b/Ix/NET/System.Interactive/IYielder.cs new file mode 100644 index 0000000..256f510 --- /dev/null +++ b/Ix/NET/System.Interactive/IYielder.cs @@ -0,0 +1,101 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. +using System; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using System.Security; + +#if HAS_AWAIT +namespace System.Linq +{ + public interface IYielder + { + IAwaitable Return(T value); + IAwaitable Break(); + } + + class Yielder : IYielder, IAwaitable, IAwaiter + { + private readonly Action> _create; + private bool _running; + private bool _hasValue; + private T _value; + private bool _stopped; + private Action _continuation; + + public Yielder(Action> create) + { + _create = create; + } + + public IAwaitable Return(T value) + { + _hasValue = true; + _value = value; + return this; + } + + public IAwaitable Break() + { + _stopped = true; + return this; + } + + public Yielder GetEnumerator() + { + return this; + } + + public bool MoveNext() + { + if (!_running) + { + _running = true; + _create(this); + } + else + { + _hasValue = false; + _continuation(); + } + + return !_stopped && _hasValue; + } + + public T Current + { + get + { + return _value; + } + } + + public void Reset() + { + throw new NotSupportedException(); + } + + public IAwaiter GetAwaiter() + { + return this; + } + + public bool IsCompleted + { + get { return false; } + } + + public void GetResult() { } + + [SecurityCritical] + public void UnsafeOnCompleted(Action continuation) + { + _continuation = continuation; + } + + public void OnCompleted(Action continuation) + { + _continuation = continuation; + } + } +} +#endif diff --git a/Ix/NET/System.Interactive/Properties/AssemblyInfo.cs b/Ix/NET/System.Interactive/Properties/AssemblyInfo.cs index 0bafb78..9c6dbb5 100644 --- a/Ix/NET/System.Interactive/Properties/AssemblyInfo.cs +++ b/Ix/NET/System.Interactive/Properties/AssemblyInfo.cs @@ -12,13 +12,9 @@ using System.Security; #else [assembly: AssemblyConfiguration("Retail")] #endif -[assembly: AssemblyCompany("Microsoft Corporation")] -#if STABLE +[assembly: AssemblyCompany("Microsoft Open Technologies, Inc.")] [assembly: AssemblyProduct("Interactive Extensions")] -#else -[assembly: AssemblyProduct("Interactive Extensions (Experimental Release)")] -#endif -[assembly: AssemblyCopyright("\x00a9 Microsoft Corporation. All rights reserved.")] +[assembly: AssemblyCopyright("\x00a9 Microsoft Open Technologies, Inc. All rights reserved.")] [assembly: NeutralResourcesLanguage("en-US")] #if !PLIB @@ -27,11 +23,16 @@ using System.Security; [assembly: CLSCompliant(true)] -#if DESKTOPCLR && NO_CODECOVERAGE +#if HAS_APTCA && NO_CODECOVERAGE [assembly: AllowPartiallyTrustedCallers] #endif -// -// Note: Assembly (file) version numbers get inserted by the build system on the fly. Inspect the Team Build workflows -// and the custom activity in Build/Source/Activities/AppendVersionInfo.cs for more information. -// +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== + +[assembly: AssemblyVersion("1.2.0.0")] +[assembly: AssemblyFileVersion("1.2.0.0")] +[assembly: AssemblyInformationalVersion("1.2.0.0")] + diff --git a/Ix/NET/System.Interactive/System.Interactive.csproj b/Ix/NET/System.Interactive/System.Interactive.csproj index a4646a5..75acf66 100644 --- a/Ix/NET/System.Interactive/System.Interactive.csproj +++ b/Ix/NET/System.Interactive/System.Interactive.csproj @@ -13,21 +13,20 @@ v4.0 512 true + 1591 + $(OutputPath)\$(AssemblyName).XML - - Profile1 - - + - + @@ -35,6 +34,7 @@ + diff --git a/Ix/NET/Tests/AsyncTests.Aggregates.cs b/Ix/NET/Tests/AsyncTests.Aggregates.cs index 1e43178..82de063 100644 --- a/Ix/NET/Tests/AsyncTests.Aggregates.cs +++ b/Ix/NET/Tests/AsyncTests.Aggregates.cs @@ -1,5 +1,5 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -#if DESKTOPCLR40 +#if !NO_TPL using System; using System.Collections.Generic; diff --git a/Ix/NET/Tests/AsyncTests.Bugs.cs b/Ix/NET/Tests/AsyncTests.Bugs.cs index 61ae7aa..7fc8530 100644 --- a/Ix/NET/Tests/AsyncTests.Bugs.cs +++ b/Ix/NET/Tests/AsyncTests.Bugs.cs @@ -1,6 +1,5 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -#if DESKTOPCLR40 - +#if !NO_TPL using System; using System.Collections.Generic; using System.Linq; diff --git a/Ix/NET/Tests/AsyncTests.Conversions.cs b/Ix/NET/Tests/AsyncTests.Conversions.cs index 1c1c2a2..235ff7c 100644 --- a/Ix/NET/Tests/AsyncTests.Conversions.cs +++ b/Ix/NET/Tests/AsyncTests.Conversions.cs @@ -1,6 +1,5 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -#if DESKTOPCLR40 - +#if !NO_TPL using System; using System.Collections.Generic; using System.Linq; diff --git a/Ix/NET/Tests/AsyncTests.Creation.cs b/Ix/NET/Tests/AsyncTests.Creation.cs index 32e849a..b090e4c 100644 --- a/Ix/NET/Tests/AsyncTests.Creation.cs +++ b/Ix/NET/Tests/AsyncTests.Creation.cs @@ -1,5 +1,5 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -#if DESKTOPCLR40 +#if !NO_TPL using System; using System.Collections.Generic; diff --git a/Ix/NET/Tests/AsyncTests.Exceptions.cs b/Ix/NET/Tests/AsyncTests.Exceptions.cs index f7c8a8f..7b9db22 100644 --- a/Ix/NET/Tests/AsyncTests.Exceptions.cs +++ b/Ix/NET/Tests/AsyncTests.Exceptions.cs @@ -1,5 +1,5 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -#if DESKTOPCLR40 +#if !NO_TPL using System; using System.Collections.Generic; @@ -364,7 +364,7 @@ namespace Tests Assert.IsTrue(b); } - [TestMethod] + //[TestMethod] public void Finally6() { var b = false; diff --git a/Ix/NET/Tests/AsyncTests.Multiple.cs b/Ix/NET/Tests/AsyncTests.Multiple.cs index 1ddd56f..2b315b4 100644 --- a/Ix/NET/Tests/AsyncTests.Multiple.cs +++ b/Ix/NET/Tests/AsyncTests.Multiple.cs @@ -1,5 +1,5 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -#if DESKTOPCLR40 +#if !NO_TPL using System; using System.Collections.Generic; diff --git a/Ix/NET/Tests/AsyncTests.Single.cs b/Ix/NET/Tests/AsyncTests.Single.cs index 409f48a..90c0cd7 100644 --- a/Ix/NET/Tests/AsyncTests.Single.cs +++ b/Ix/NET/Tests/AsyncTests.Single.cs @@ -1,5 +1,5 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -#if DESKTOPCLR40 +#if !NO_TPL using System; using System.Collections.Generic; diff --git a/Ix/NET/Tests/AsyncTests.cs b/Ix/NET/Tests/AsyncTests.cs index 9279bb7..6691f3d 100644 --- a/Ix/NET/Tests/AsyncTests.cs +++ b/Ix/NET/Tests/AsyncTests.cs @@ -1,5 +1,5 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -#if DESKTOPCLR40 +#if !NO_TPL using System; using System.Collections.Generic; diff --git a/Ix/NET/Tests/Properties/AssemblyInfo.cs b/Ix/NET/Tests/Properties/AssemblyInfo.cs index 6536c5c..bfc081d 100644 --- a/Ix/NET/Tests/Properties/AssemblyInfo.cs +++ b/Ix/NET/Tests/Properties/AssemblyInfo.cs @@ -19,9 +19,6 @@ using System.Runtime.InteropServices; // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("aec256c2-1e0e-48d7-a312-7184dc67b1f0")] - // Version information for an assembly consists of the following four values: // // Major Version @@ -31,5 +28,5 @@ using System.Runtime.InteropServices; // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -//[assembly: AssemblyVersion("1.0.0.0")] -//[assembly: AssemblyFileVersion("1.0.0.0")] +//[assembly: AssemblyVersion("1.2.0.0")] +//[assembly: AssemblyFileVersion("1.2.0.0")] diff --git a/Ix/NET/Tests/Tests.Buffering.cs b/Ix/NET/Tests/Tests.Buffering.cs index 0f6e81c..4fdb268 100644 --- a/Ix/NET/Tests/Tests.Buffering.cs +++ b/Ix/NET/Tests/Tests.Buffering.cs @@ -63,7 +63,7 @@ namespace Tests NoNext(e1); } - [TestMethod] + //[TestMethod] public void Share4() { var rng = Enumerable.Range(0, 5).Share(); diff --git a/Ix/NET/Tests/Tests.Creation.cs b/Ix/NET/Tests/Tests.Creation.cs index 81fee03..c71be5a 100644 --- a/Ix/NET/Tests/Tests.Creation.cs +++ b/Ix/NET/Tests/Tests.Creation.cs @@ -40,6 +40,27 @@ namespace Tests Assert.IsTrue(hot); } +#if HAS_AWAIT + [TestMethod] + public void CreateYield() + { + var xs = EnumerableEx.Create(async yield => { + var i = 0; + while (i < 10) { + await yield.Return(i++); + } + }); + + int j = 0; + foreach (int elem in xs) { + Assert.AreEqual(elem, j); + j++; + } + + Assert.AreEqual(j, 10); + } +#endif + private static IEnumerator MyEnumerator() { yield return 1; diff --git a/Ix/NET/Tests/Tests.Qbservable.cs b/Ix/NET/Tests/Tests.Qbservable.cs index d174eee..9cd53b2 100644 --- a/Ix/NET/Tests/Tests.Qbservable.cs +++ b/Ix/NET/Tests/Tests.Qbservable.cs @@ -1,5 +1,5 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -#if !SILVERLIGHTM7 +#if !SILVERLIGHTM7 && !PORTABLE using System; using System.Collections.Generic; @@ -52,10 +52,18 @@ namespace Tests foreach (var group in mtch) { - var oss = group.Enumerable.Where(m => filterReturn(m.ReturnType)).Select(m => GetSignature(m, false)).OrderBy(x => x).ToList(); - var qss = group.Queryable.Where(m => filterHelper(m)).Select(m => GetSignature(m, true)).OrderBy(x => x).ToList(); - - Assert.IsTrue(oss.SequenceEqual(qss), "Mismatch between QueryableEx and EnumerableEx for " + group.Name); + var oss = group.Enumerable + .Where(m => filterReturn(m.ReturnType)) + .Select(m => GetSignature(m, false)) + .OrderBy(x => x).ToList(); + + var qss = group.Queryable + .Where(m => filterHelper(m)) + .Select(m => GetSignature(m, true)) + .OrderBy(x => x).ToList(); + + if (!group.Name.Equals("Create")) + Assert.IsTrue(oss.SequenceEqual(qss), "Mismatch between QueryableEx and EnumerableEx for " + group.Name); } } diff --git a/Ix/NET/Tests/Tests.csproj b/Ix/NET/Tests/Tests.csproj index f3f57ff..b24aa2f 100644 --- a/Ix/NET/Tests/Tests.csproj +++ b/Ix/NET/Tests/Tests.csproj @@ -11,11 +11,14 @@ Properties Tests Tests - v4.0 512 {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + v4.0 + + true true @@ -26,11 +29,13 @@ TestPage.html true + _$(AssemblyName) - + + ..\..\..\..\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\PublicAssemblies\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll @@ -74,11 +79,11 @@ - + {7269A578-326A-4C3E-9874-A2D2600095BC} System.Interactive.Async - + {6D62E966-469D-4A99-BD43-0A17FA14FB4F} System.Interactive.Providers diff --git a/Rx/NET/Resources/Artwork/Logo_Color.design b/Rx/NET/Resources/Artwork/Logo_Color.design new file mode 100644 index 0000000..7ddcafc Binary files /dev/null and b/Rx/NET/Resources/Artwork/Logo_Color.design differ diff --git a/Rx/NET/Resources/Artwork/Logo_Color_2010x2000.psd b/Rx/NET/Resources/Artwork/Logo_Color_2010x2000.psd new file mode 100644 index 0000000..0d0a7de Binary files /dev/null and b/Rx/NET/Resources/Artwork/Logo_Color_2010x2000.psd differ diff --git a/Rx/NET/Resources/Artwork/Logo_Color_300x300.png b/Rx/NET/Resources/Artwork/Logo_Color_300x300.png new file mode 100644 index 0000000..b292677 Binary files /dev/null and b/Rx/NET/Resources/Artwork/Logo_Color_300x300.png differ diff --git a/Rx/NET/Samples/Portable/.nuget/NuGet.Config b/Rx/NET/Samples/Portable/.nuget/NuGet.Config new file mode 100644 index 0000000..67f8ea0 --- /dev/null +++ b/Rx/NET/Samples/Portable/.nuget/NuGet.Config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Rx/NET/Samples/Portable/.nuget/NuGet.exe b/Rx/NET/Samples/Portable/.nuget/NuGet.exe new file mode 100644 index 0000000..2c93698 Binary files /dev/null and b/Rx/NET/Samples/Portable/.nuget/NuGet.exe differ diff --git a/Rx/NET/Samples/Portable/.nuget/NuGet.targets b/Rx/NET/Samples/Portable/.nuget/NuGet.targets new file mode 100644 index 0000000..83fe906 --- /dev/null +++ b/Rx/NET/Samples/Portable/.nuget/NuGet.targets @@ -0,0 +1,136 @@ + + + + $(MSBuildProjectDirectory)\..\ + + + false + + + false + + + true + + + false + + + + + + + + + + + $([System.IO.Path]::Combine($(SolutionDir), ".nuget")) + $([System.IO.Path]::Combine($(ProjectDir), "packages.config")) + + + + + $(SolutionDir).nuget + packages.config + + + + + $(NuGetToolsPath)\NuGet.exe + @(PackageSource) + + "$(NuGetExePath)" + mono --runtime=v4.0.30319 $(NuGetExePath) + + $(TargetDir.Trim('\\')) + + -RequireConsent + -NonInteractive + + "$(SolutionDir) " + "$(SolutionDir)" + + + $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir) + $(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols + + + + RestorePackages; + $(BuildDependsOn); + + + + + $(BuildDependsOn); + BuildPackage; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Net40ConsoleApp_NuGet.csproj b/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Net40ConsoleApp_NuGet.csproj new file mode 100644 index 0000000..4d7cde7 --- /dev/null +++ b/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Net40ConsoleApp_NuGet.csproj @@ -0,0 +1,79 @@ + + + + + Debug + AnyCPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36} + Exe + Properties + Net40ConsoleApp_NuGet + Net40ConsoleApp_NuGet + v4.0 + 512 + ..\ + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + ..\packages\Rx-Core.2.2.31101\lib\net40\System.Reactive.Core.dll + + + ..\packages\Rx-Interfaces.2.2.31101\lib\net40\System.Reactive.Interfaces.dll + + + ..\packages\Rx-Linq.2.2.31101\lib\net40\System.Reactive.Linq.dll + + + ..\packages\Rx-PlatformServices.2.2.31101\lib\net40\System.Reactive.PlatformServices.dll + + + + + + + + + + + + + + {291dba6e-5b96-4d97-8150-36b47053d978} + PortableClassLibrary_NuGet + + + + + + + + + \ No newline at end of file diff --git a/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Program.cs b/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Program.cs new file mode 100644 index 0000000..196824c --- /dev/null +++ b/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Program.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Reactive.Linq; + +namespace Net40ConsoleApplication +{ + class Program + { + static void Main(string[] args) + { + + var portableClass = new PortableClassLibrary.PortableClass(); + + var scheduler = System.Reactive.Concurrency.CurrentThreadScheduler.Instance; + + // Create timer and route output to console + portableClass.CreateTimer(10, TimeSpan.FromSeconds(1.5)) + .Buffer(2) + .ObserveOn(scheduler) + .Subscribe(items => + { + Console.WriteLine(" 1: Received items {0}", string.Join(", ", items)); + }, onCompleted: () => + { + Console.WriteLine(" 1: Finished "); + }); + + // Create list observer and route output to console, but specify scheduler instead of using SubscribeOnDispatcher + portableClass.CreateList(scheduler) + .Delay(TimeSpan.FromSeconds(1)) + .Subscribe(item => + { + Console.WriteLine(" 2: Received item {0}", item); + }, onCompleted: () => + { + Console.WriteLine(" 2: Finished "); + }); + + + Console.WriteLine("Press enter to exit"); + Console.ReadLine(); + } + } +} diff --git a/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Properties/AssemblyInfo.cs b/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..792e7d5 --- /dev/null +++ b/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Net40ConsoleApp_NuGet")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("Net40ConsoleApp_NuGet")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("156b78d6-ba9b-4340-99d9-1c2435aa4b15")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/packages.config b/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/packages.config new file mode 100644 index 0000000..1221784 --- /dev/null +++ b/Rx/NET/Samples/Portable/Net40ConsoleApp_NuGet/packages.config @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Rx/NET/Samples/Portable/Net40ConsoleApplication/Net40ConsoleApplication.csproj b/Rx/NET/Samples/Portable/Net40ConsoleApplication/Net40ConsoleApplication.csproj new file mode 100644 index 0000000..88d892a --- /dev/null +++ b/Rx/NET/Samples/Portable/Net40ConsoleApplication/Net40ConsoleApplication.csproj @@ -0,0 +1,95 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC} + Exe + Properties + Net40ConsoleApplication + Net40ConsoleApplication + v4.0 + Client + 512 + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + ..\..\..\Source\bin\Debug40\System.Reactive.Core.dll + + + ..\..\..\Source\bin\Debug40\System.Reactive.Debugger.dll + + + ..\..\..\Source\bin\Debug40\System.Reactive.Experimental.dll + + + ..\..\..\Source\bin\Debug40\System.Reactive.Interfaces.dll + + + ..\..\..\Source\bin\Debug40\System.Reactive.Linq.dll + + + ..\..\..\Source\bin\Debug40\System.Reactive.PlatformServices.dll + + + ..\..\..\Source\bin\Debug40\System.Reactive.Providers.dll + + + ..\..\..\Source\bin\Debug40\System.Reactive.Runtime.Remoting.dll + + + ..\..\..\Source\bin\Debug40\System.Reactive.Windows.Forms.dll + + + ..\..\..\Source\bin\Debug40\System.Reactive.Windows.Threading.dll + + + + + + + + + + + + + + + + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420} + PortableClassLibrary + + + + + \ No newline at end of file diff --git a/Rx/NET/Samples/Portable/Net40ConsoleApplication/Program.cs b/Rx/NET/Samples/Portable/Net40ConsoleApplication/Program.cs new file mode 100644 index 0000000..196824c --- /dev/null +++ b/Rx/NET/Samples/Portable/Net40ConsoleApplication/Program.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Reactive.Linq; + +namespace Net40ConsoleApplication +{ + class Program + { + static void Main(string[] args) + { + + var portableClass = new PortableClassLibrary.PortableClass(); + + var scheduler = System.Reactive.Concurrency.CurrentThreadScheduler.Instance; + + // Create timer and route output to console + portableClass.CreateTimer(10, TimeSpan.FromSeconds(1.5)) + .Buffer(2) + .ObserveOn(scheduler) + .Subscribe(items => + { + Console.WriteLine(" 1: Received items {0}", string.Join(", ", items)); + }, onCompleted: () => + { + Console.WriteLine(" 1: Finished "); + }); + + // Create list observer and route output to console, but specify scheduler instead of using SubscribeOnDispatcher + portableClass.CreateList(scheduler) + .Delay(TimeSpan.FromSeconds(1)) + .Subscribe(item => + { + Console.WriteLine(" 2: Received item {0}", item); + }, onCompleted: () => + { + Console.WriteLine(" 2: Finished "); + }); + + + Console.WriteLine("Press enter to exit"); + Console.ReadLine(); + } + } +} diff --git a/Rx/NET/Samples/Portable/Net40ConsoleApplication/Properties/AssemblyInfo.cs b/Rx/NET/Samples/Portable/Net40ConsoleApplication/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..1014804 --- /dev/null +++ b/Rx/NET/Samples/Portable/Net40ConsoleApplication/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Net40ConsoleApplication")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("Net40ConsoleApplication")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("15f46f39-53b0-438e-8dd5-10432d55f9bf")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Rx/NET/Samples/Portable/Portable.sln b/Rx/NET/Samples/Portable/Portable.sln new file mode 100644 index 0000000..76165a8 --- /dev/null +++ b/Rx/NET/Samples/Portable/Portable.sln @@ -0,0 +1,85 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PortableClassLibrary", "PortableClassLibrary\PortableClassLibrary.csproj", "{24A63BF3-D9ED-4F4D-B576-E7A73AE00420}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Net40ConsoleApplication", "Net40ConsoleApplication\Net40ConsoleApplication.csproj", "{CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SilverlightApplication", "SilverlightApplication\SilverlightApplication.csproj", "{50100DB6-3657-444B-B308-42A9FD1B283E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PortableClassLibrary_NuGet", "PortableClassLibrary_NuGet\PortableClassLibrary_NuGet.csproj", "{291DBA6E-5B96-4D97-8150-36B47053D978}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{C80C3F68-4A59-4A94-B404-9C69B5E91E8D}" + ProjectSection(SolutionItems) = preProject + .nuget\NuGet.Config = .nuget\NuGet.Config + .nuget\NuGet.exe = .nuget\NuGet.exe + .nuget\NuGet.targets = .nuget\NuGet.targets + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Net40ConsoleApp_NuGet", "Net40ConsoleApp_NuGet\Net40ConsoleApp_NuGet.csproj", "{C595EAC9-479C-43A9-9D23-4A06D24A7D36}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420}.Debug|Any CPU.Build.0 = Debug|Any CPU + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420}.Debug|x86.ActiveCfg = Debug|Any CPU + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420}.Release|Any CPU.ActiveCfg = Release|Any CPU + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420}.Release|Any CPU.Build.0 = Release|Any CPU + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420}.Release|x86.ActiveCfg = Release|Any CPU + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}.Debug|Any CPU.ActiveCfg = Debug|x86 + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}.Debug|Mixed Platforms.Build.0 = Debug|x86 + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}.Debug|x86.ActiveCfg = Debug|x86 + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}.Debug|x86.Build.0 = Debug|x86 + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}.Release|Any CPU.ActiveCfg = Release|x86 + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}.Release|Mixed Platforms.ActiveCfg = Release|x86 + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}.Release|Mixed Platforms.Build.0 = Release|x86 + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}.Release|x86.ActiveCfg = Release|x86 + {CCCD13E5-63B9-43C7-93B7-71E6709CFDEC}.Release|x86.Build.0 = Release|x86 + {50100DB6-3657-444B-B308-42A9FD1B283E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {50100DB6-3657-444B-B308-42A9FD1B283E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50100DB6-3657-444B-B308-42A9FD1B283E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {50100DB6-3657-444B-B308-42A9FD1B283E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {50100DB6-3657-444B-B308-42A9FD1B283E}.Debug|x86.ActiveCfg = Debug|Any CPU + {50100DB6-3657-444B-B308-42A9FD1B283E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50100DB6-3657-444B-B308-42A9FD1B283E}.Release|Any CPU.Build.0 = Release|Any CPU + {50100DB6-3657-444B-B308-42A9FD1B283E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {50100DB6-3657-444B-B308-42A9FD1B283E}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {50100DB6-3657-444B-B308-42A9FD1B283E}.Release|x86.ActiveCfg = Release|Any CPU + {291DBA6E-5B96-4D97-8150-36B47053D978}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {291DBA6E-5B96-4D97-8150-36B47053D978}.Debug|Any CPU.Build.0 = Debug|Any CPU + {291DBA6E-5B96-4D97-8150-36B47053D978}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {291DBA6E-5B96-4D97-8150-36B47053D978}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {291DBA6E-5B96-4D97-8150-36B47053D978}.Debug|x86.ActiveCfg = Debug|Any CPU + {291DBA6E-5B96-4D97-8150-36B47053D978}.Release|Any CPU.ActiveCfg = Release|Any CPU + {291DBA6E-5B96-4D97-8150-36B47053D978}.Release|Any CPU.Build.0 = Release|Any CPU + {291DBA6E-5B96-4D97-8150-36B47053D978}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {291DBA6E-5B96-4D97-8150-36B47053D978}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {291DBA6E-5B96-4D97-8150-36B47053D978}.Release|x86.ActiveCfg = Release|Any CPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36}.Debug|x86.ActiveCfg = Debug|Any CPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36}.Release|Any CPU.Build.0 = Release|Any CPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {C595EAC9-479C-43A9-9D23-4A06D24A7D36}.Release|x86.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Rx/NET/Samples/Portable/PortableClassLibrary/PortableClass.cs b/Rx/NET/Samples/Portable/PortableClassLibrary/PortableClass.cs new file mode 100644 index 0000000..6b2bfa7 --- /dev/null +++ b/Rx/NET/Samples/Portable/PortableClassLibrary/PortableClass.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using System.Reactive; +using System.Reactive.Linq; +using System.Reactive.Concurrency; + +namespace PortableClassLibrary +{ + public class PortableClass + { + public IObservable CreateTimer(int numSamples, TimeSpan timespan) + { + var fromTime = DateTimeOffset.Now.Add(timespan); + return Observable.Timer(fromTime, timespan) + .Take(numSamples); + } + + public IObservable CreateList(IScheduler scheduler) + { + var values = new [] {1,2,5,7,8,324,4234,654654}; + + return values.ToObservable(scheduler); + } + } +} diff --git a/Rx/NET/Samples/Portable/PortableClassLibrary/PortableClassLibrary.csproj b/Rx/NET/Samples/Portable/PortableClassLibrary/PortableClassLibrary.csproj new file mode 100644 index 0000000..b527c64 --- /dev/null +++ b/Rx/NET/Samples/Portable/PortableClassLibrary/PortableClassLibrary.csproj @@ -0,0 +1,72 @@ + + + + + 10.0 + Debug + AnyCPU + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420} + Library + Properties + PortableClassLibrary + PortableClassLibrary + v4.0 + Profile136 + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + + + 4.0 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + ..\..\..\Source\bin\DebugPLLITE\System.Reactive.Core.dll + + + ..\..\..\Source\bin\DebugPLLITE\System.Reactive.Debugger.dll + + + ..\..\..\Source\bin\DebugPLLITE\System.Reactive.Experimental.dll + + + ..\..\..\Source\bin\DebugPLLITE\System.Reactive.Interfaces.dll + + + ..\..\..\Source\bin\DebugPLLITE\System.Reactive.Linq.dll + + + ..\..\..\Source\bin\DebugPLLITE\System.Reactive.Providers.dll + + + + + \ No newline at end of file diff --git a/Rx/NET/Samples/Portable/PortableClassLibrary/Properties/AssemblyInfo.cs b/Rx/NET/Samples/Portable/PortableClassLibrary/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..2b76fc4 --- /dev/null +++ b/Rx/NET/Samples/Portable/PortableClassLibrary/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Resources; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("PortableClassLibrary")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("PortableClassLibrary")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguage("en")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/PortableClass.cs b/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/PortableClass.cs new file mode 100644 index 0000000..6b2bfa7 --- /dev/null +++ b/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/PortableClass.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using System.Reactive; +using System.Reactive.Linq; +using System.Reactive.Concurrency; + +namespace PortableClassLibrary +{ + public class PortableClass + { + public IObservable CreateTimer(int numSamples, TimeSpan timespan) + { + var fromTime = DateTimeOffset.Now.Add(timespan); + return Observable.Timer(fromTime, timespan) + .Take(numSamples); + } + + public IObservable CreateList(IScheduler scheduler) + { + var values = new [] {1,2,5,7,8,324,4234,654654}; + + return values.ToObservable(scheduler); + } + } +} diff --git a/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/PortableClassLibrary_NuGet.csproj b/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/PortableClassLibrary_NuGet.csproj new file mode 100644 index 0000000..333e363 --- /dev/null +++ b/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/PortableClassLibrary_NuGet.csproj @@ -0,0 +1,101 @@ + + + + + 10.0 + Debug + AnyCPU + {291DBA6E-5B96-4D97-8150-36B47053D978} + Library + Properties + PortableClassLibrary_NuGet + PortableClassLibrary_NuGet + v4.0 + Profile136 + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + + + 4.0 + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + ..\ + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + false + + + + + + + + + + + + + ..\packages\Rx-Core.2.2.31101\lib\portable-net40+sl5+win8+wp8\System.Reactive.Core.dll + + + ..\packages\Rx-Interfaces.2.2.31101\lib\portable-net40+sl5+win8+wp8\System.Reactive.Interfaces.dll + + + ..\packages\Rx-Linq.2.2.31101\lib\portable-net40+sl5+win8+wp8\System.Reactive.Linq.dll + + + ..\packages\Rx-PlatformServices.2.2.31101\lib\portable-net40+sl5+win8+wp8\System.Reactive.PlatformServices.dll + + + + + + \ No newline at end of file diff --git a/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/Properties/AssemblyInfo.cs b/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..16b6b54 --- /dev/null +++ b/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/Properties/AssemblyInfo.cs @@ -0,0 +1,30 @@ +using System.Resources; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("PortableClassLibrary_NuGet")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("PortableClassLibrary_NuGet")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguage("en")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/app.config b/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/app.config new file mode 100644 index 0000000..bc20d14 --- /dev/null +++ b/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/app.config @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/packages.config b/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/packages.config new file mode 100644 index 0000000..4b57ccf --- /dev/null +++ b/Rx/NET/Samples/Portable/PortableClassLibrary_NuGet/packages.config @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Rx/NET/Samples/Portable/SilverlightApplication/App.xaml b/Rx/NET/Samples/Portable/SilverlightApplication/App.xaml new file mode 100644 index 0000000..0b6e380 --- /dev/null +++ b/Rx/NET/Samples/Portable/SilverlightApplication/App.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/Rx/NET/Samples/Portable/SilverlightApplication/App.xaml.cs b/Rx/NET/Samples/Portable/SilverlightApplication/App.xaml.cs new file mode 100644 index 0000000..16c1ecb --- /dev/null +++ b/Rx/NET/Samples/Portable/SilverlightApplication/App.xaml.cs @@ -0,0 +1,68 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Animation; +using System.Windows.Shapes; + +namespace SilverlightApplication +{ + public partial class App : Application + { + + public App() + { + this.Startup += this.Application_Startup; + this.Exit += this.Application_Exit; + this.UnhandledException += this.Application_UnhandledException; + + InitializeComponent(); + } + + private void Application_Startup(object sender, StartupEventArgs e) + { + this.RootVisual = new MainPage(); + } + + private void Application_Exit(object sender, EventArgs e) + { + + } + + private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) + { + // If the app is running outside of the debugger then report the exception using + // the browser's exception mechanism. On IE this will display it a yellow alert + // icon in the status bar and Firefox will display a script error. + if (!System.Diagnostics.Debugger.IsAttached) + { + + // NOTE: This will allow the application to continue running after an exception has been thrown + // but not handled. + // For production applications this error handling should be replaced with something that will + // report the error to the website and stop the application. + e.Handled = true; + Deployment.Current.Dispatcher.BeginInvoke(delegate { ReportErrorToDOM(e); }); + } + } + + private void ReportErrorToDOM(ApplicationUnhandledExceptionEventArgs e) + { + try + { + string errorMsg = e.ExceptionObject.Message + e.ExceptionObject.StackTrace; + errorMsg = errorMsg.Replace('"', '\'').Replace("\r\n", @"\n"); + + System.Windows.Browser.HtmlPage.Window.Eval("throw new Error(\"Unhandled Error in Silverlight Application " + errorMsg + "\");"); + } + catch (Exception) + { + } + } + } +} diff --git a/Rx/NET/Samples/Portable/SilverlightApplication/MainPage.xaml b/Rx/NET/Samples/Portable/SilverlightApplication/MainPage.xaml new file mode 100644 index 0000000..c358e56 --- /dev/null +++ b/Rx/NET/Samples/Portable/SilverlightApplication/MainPage.xaml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/Rx/NET/Samples/Portable/SilverlightApplication/MainPage.xaml.cs b/Rx/NET/Samples/Portable/SilverlightApplication/MainPage.xaml.cs new file mode 100644 index 0000000..2bfdb12 --- /dev/null +++ b/Rx/NET/Samples/Portable/SilverlightApplication/MainPage.xaml.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Windows; +using System.Windows.Controls; +using System.Windows.Documents; +using System.Windows.Input; +using System.Windows.Media; +using System.Windows.Media.Animation; +using System.Windows.Shapes; +using System.Reactive; +using System.Reactive.Linq; + +namespace SilverlightApplication +{ + public partial class MainPage : UserControl + { + public MainPage() + { + InitializeComponent(); + Loaded += new RoutedEventHandler(MainPage_Loaded); + } + + void MainPage_Loaded(object sender, RoutedEventArgs e) + { + var portableClass = new PortableClassLibrary.PortableClass(); + + // Create timer and route output to list1 + portableClass.CreateTimer(10, TimeSpan.FromSeconds(1.5)) + .Buffer(2) + .ObserveOnDispatcher() + .Subscribe(items => + { + foreach (var item in items) + list1.Items.Add(item); + }, onCompleted: () => + { + list1.Items.Add("Finished"); + }); + + // Create list observer and route output to list1, but specify scheduler instead of using SubscribeOnDispatcher + var scheduler = System.Reactive.Concurrency.DispatcherScheduler.Current; + portableClass.CreateList(scheduler) + .Delay(TimeSpan.FromSeconds(1)) + .ObserveOn(scheduler) + .Subscribe(item => + { + list2.Items.Add(item); + }, onCompleted: () => + { + list2.Items.Add("Finished"); + }); + + + } + } +} diff --git a/Rx/NET/Samples/Portable/SilverlightApplication/Properties/AppManifest.xml b/Rx/NET/Samples/Portable/SilverlightApplication/Properties/AppManifest.xml new file mode 100644 index 0000000..6712a11 --- /dev/null +++ b/Rx/NET/Samples/Portable/SilverlightApplication/Properties/AppManifest.xml @@ -0,0 +1,6 @@ + + + + diff --git a/Rx/NET/Samples/Portable/SilverlightApplication/Properties/AssemblyInfo.cs b/Rx/NET/Samples/Portable/SilverlightApplication/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..1f8f23a --- /dev/null +++ b/Rx/NET/Samples/Portable/SilverlightApplication/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SilverlightApplication")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SilverlightApplication")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("768e8030-d2c8-42c2-8e2c-58b43809ce52")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Rx/NET/Samples/Portable/SilverlightApplication/SilverlightApplication.csproj b/Rx/NET/Samples/Portable/SilverlightApplication/SilverlightApplication.csproj new file mode 100644 index 0000000..5a21698 --- /dev/null +++ b/Rx/NET/Samples/Portable/SilverlightApplication/SilverlightApplication.csproj @@ -0,0 +1,138 @@ + + + + Debug + AnyCPU + 8.0.50727 + 2.0 + {50100DB6-3657-444B-B308-42A9FD1B283E} + {A1591282-1198-4647-A2B1-27E5FF5F6F3B};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} + Library + Properties + SilverlightApplication + SilverlightApplication + Silverlight + v4.0 + $(TargetFrameworkVersion) + true + + + true + true + SilverlightApplication.xap + Properties\AppManifest.xml + SilverlightApplication.App + SilverlightApplicationTestPage.html + true + true + false + Properties\OutOfBrowserSettings.xml + false + true + + + + + + v3.5 + + + true + full + false + Bin\Debug + DEBUG;TRACE;SILVERLIGHT + true + true + prompt + 4 + + + pdbonly + true + Bin\Release + TRACE;SILVERLIGHT + true + true + prompt + 4 + + + + + ..\..\..\Source\bin\DebugSL4\System.Reactive.Core.dll + + + ..\..\..\Source\bin\DebugSL4\System.Reactive.Debugger.dll + + + ..\..\..\Source\bin\DebugSL4\System.Reactive.Experimental.dll + + + ..\..\..\Source\bin\DebugSL4\System.Reactive.Interfaces.dll + + + ..\..\..\Source\bin\DebugSL4\System.Reactive.Linq.dll + + + ..\..\..\Source\bin\DebugSL4\System.Reactive.PlatformServices.dll + + + ..\..\..\Source\bin\DebugSL4\System.Reactive.Providers.dll + + + ..\..\..\Source\bin\DebugSL4\System.Reactive.Windows.Threading.dll + + + + + + + + + + + App.xaml + + + MainPage.xaml + + + + + + Designer + MSBuild:Compile + + + Designer + MSBuild:Compile + + + + + + + + {24A63BF3-D9ED-4F4D-B576-E7A73AE00420} + PortableClassLibrary + + + + + + + + + + + + \ No newline at end of file diff --git a/Rx/NET/Source/.nuget/NuGet.Config b/Rx/NET/Source/.nuget/NuGet.Config new file mode 100644 index 0000000..67f8ea0 --- /dev/null +++ b/Rx/NET/Source/.nuget/NuGet.Config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Rx/NET/Source/.nuget/NuGet.exe b/Rx/NET/Source/.nuget/NuGet.exe new file mode 100644 index 0000000..63c19c9 Binary files /dev/null and b/Rx/NET/Source/.nuget/NuGet.exe differ diff --git a/Rx/NET/Source/.nuget/NuGet.targets b/Rx/NET/Source/.nuget/NuGet.targets new file mode 100644 index 0000000..83fe906 --- /dev/null +++ b/Rx/NET/Source/.nuget/NuGet.targets @@ -0,0 +1,136 @@ + + + + $(MSBuildProjectDirectory)\..\ + + + false + + + false + + + true + + + false + + + + + + + + + + + $([System.IO.Path]::Combine($(SolutionDir), ".nuget")) + $([System.IO.Path]::Combine($(ProjectDir), "packages.config")) + + + + + $(SolutionDir).nuget + packages.config + + + + + $(NuGetToolsPath)\NuGet.exe + @(PackageSource) + + "$(NuGetExePath)" + mono --runtime=v4.0.30319 $(NuGetExePath) + + $(TargetDir.Trim('\\')) + + -RequireConsent + -NonInteractive + + "$(SolutionDir) " + "$(SolutionDir)" + + + $(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir) + $(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols + + + + RestorePackages; + $(BuildDependsOn); + + + + + $(BuildDependsOn); + BuildPackage; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Rx/NET/Source/35MSSharedLib1024.snk b/Rx/NET/Source/35MSSharedLib1024.snk new file mode 100644 index 0000000..695f1b3 Binary files /dev/null and b/Rx/NET/Source/35MSSharedLib1024.snk differ diff --git a/Rx/NET/Source/BuildAll.proj b/Rx/NET/Source/BuildAll.proj index 69736e4..b0e1dab 100644 --- a/Rx/NET/Source/BuildAll.proj +++ b/Rx/NET/Source/BuildAll.proj @@ -33,6 +33,12 @@ ReleasePL + + DebugPLLITE + + + ReleasePLLITE + DebugWP7 diff --git a/Rx/NET/Source/Common.targets b/Rx/NET/Source/Common.targets index 90b6fe2..5fdb426 100644 --- a/Rx/NET/Source/Common.targets +++ b/Rx/NET/Source/Common.targets @@ -23,6 +23,15 @@ PL + + Debug + PLLITE + + + Release + PLLITE + + Debug 45 @@ -77,15 +86,6 @@ WP8 - - Debug - XBLV - - - Release - XBLV - - $(DefineConstants);NO_EVENTARGS_CONSTRAINT;HAS_EDI;HAS_WINRT;HAS_PROGRESS;PREFER_ASYNC;HAS_AWAIT;HAS_APTCA;NO_REMOTING;NO_SERIALIZABLE;NO_THREAD;CRIPPLED_REFLECTION;PLIB;NO_CDS_COLLECTIONS;USE_TIMER_SELF_ROOT @@ -93,7 +93,6 @@ v4.5 Profile78 true - @@ -102,7 +101,6 @@ true DESKTOPCLR DESKTOPCLR45 - @@ -113,7 +111,6 @@ WINDOWS WINDOWS8 en-US - @@ -132,6 +129,23 @@ SILVERLIGHT SILVERLIGHT5 + + + + + $(DefineConstants);NO_RXINTERFACES;NO_SERIALIZABLE;NO_REMOTING;NO_SEMAPHORE;NO_STOPWATCH;NO_CDS;PLIB;PLIB_LITE;NO_THREAD;USE_TASKEX;CRIPPLED_REFLECTION + .NETPortable + v4.0 + + Profile136 + true + $(DefineConstants);USE_SL_DISPATCHER;NO_SERIALIZABLE;NO_REMOTING;NO_CDS;NO_TLS;NO_VARIANCE;NO_TPL;NO_HASHSET;NO_SEMAPHORE;NO_LARGEARITY;NO_EXPRESSIONVISITOR;NO_LAZY;NO_WEAKTABLE;NO_INTERLOCKED_64;WINDOWSPHONE7 @@ -145,7 +159,7 @@ - $(DefineConstants);NO_EVENTARGS_CONSTRAINT;USE_SL_DISPATCHER;NO_SERIALIZABLE;NO_REMOTING;NO_CDS_COLLECTIONS;USE_TIMER_SELF_ROOT + $(DefineConstants);HAS_EDI;HAS_PROGRESS;PREFER_ASYNC;HAS_AWAIT;NO_EVENTARGS_CONSTRAINT;USE_SL_DISPATCHER;HAS_WINRT;NO_SERIALIZABLE;NO_REMOTING;NO_CDS_COLLECTIONS;USE_TIMER_SELF_ROOT WindowsPhone v8.0 $(TargetFrameworkVersion) @@ -153,20 +167,16 @@ WINDOWS_PHONE WINDOWS_PHONE8 true - - - - - $(DefineConstants);NO_RXINTERFACES;USE_SL_DISPATCHER;NO_SERIALIZABLE;NO_REMOTING;NO_SEMAPHORE;NO_STOPWATCH;NO_CDS;NO_TPL;NO_LAZY;NO_WEAKTABLE;NO_VARIANCE;NO_HASHSET;NO_LARGEARITY;NO_EXPRESSIONVISITOR;NO_EXPRESSIONS - Silverlight - v3.0 - $(TargetFrameworkVersion) - false - SILVERLIGHT - XBOX_LAKEVIEW - + + + + + + + ..\packages\Microsoft.Bcl.1.0.19\lib\portable-net40+sl5+win8+wp8\System.Runtime.dll + False + + + ..\packages\Microsoft.Bcl.1.0.19\lib\portable-net40+sl5+win8+wp8\System.Threading.Tasks.dll + False + + + + ..\packages\Microsoft.Bcl.Async.1.0.16\lib\portable-net40+sl4+win8+wp71\Microsoft.Threading.Tasks.dll + False + + + ..\packages\Microsoft.Bcl.Async.1.0.16\lib\portable-net40+sl4+win8+wp71\Microsoft.Threading.Tasks.Extensions.dll + False + + + + + + + ..\packages\Microsoft.Bcl.Async.1.0.16\lib\net40\Microsoft.Threading.Tasks.dll + False + + + ..\packages\Microsoft.Bcl.Async.1.0.16\lib\net40\Microsoft.Threading.Tasks.Extensions.dll + False + + + ..\packages\Microsoft.Bcl.Async.1.0.16\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll + False + + + ..\packages\Microsoft.Bcl.1.0.19\lib\net40\System.Runtime.dll + False + + + ..\packages\Microsoft.Bcl.1.0.19\lib\net40\System.Threading.Tasks.dll + False + + + diff --git a/Rx/NET/Source/Import.targets b/Rx/NET/Source/Import.targets index b5f5c1e..c6403e4 100644 --- a/Rx/NET/Source/Import.targets +++ b/Rx/NET/Source/Import.targets @@ -1,29 +1,66 @@ + + + + + + + - - - - + + + - + + + + + + + + + + + + + - + + + + + + + + + + true + + + diff --git a/Rx/NET/Source/Local.testsettings b/Rx/NET/Source/Local.testsettings index 95d94d8..72cfdcc 100644 --- a/Rx/NET/Source/Local.testsettings +++ b/Rx/NET/Source/Local.testsettings @@ -19,21 +19,5 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Rx/NET/Source/Microsoft.Reactive.Testing/Properties/AssemblyInfo.cs b/Rx/NET/Source/Microsoft.Reactive.Testing/Properties/AssemblyInfo.cs index 826b2c0..fb122f2 100644 --- a/Rx/NET/Source/Microsoft.Reactive.Testing/Properties/AssemblyInfo.cs +++ b/Rx/NET/Source/Microsoft.Reactive.Testing/Properties/AssemblyInfo.cs @@ -17,7 +17,11 @@ using System.Runtime.InteropServices; [assembly: ComVisible(false)] -// -// Note: Assembly (file) version numbers get inserted by the build system on the fly. Inspect the Team Build workflows -// and the custom activity in Source/Build/Activities/AppendVersionInfo.cs for more information. -// +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== + +[assembly: AssemblyVersion("2.2.0.0")] +[assembly: AssemblyFileVersion("2.2.0.0")] +[assembly: AssemblyInformationalVersion("2.2.0.0")] diff --git a/Rx/NET/Source/Microsoft.Reactive.Testing/ReactiveTest.cs b/Rx/NET/Source/Microsoft.Reactive.Testing/ReactiveTest.cs index 37ff279..45d8424 100644 --- a/Rx/NET/Source/Microsoft.Reactive.Testing/ReactiveTest.cs +++ b/Rx/NET/Source/Microsoft.Reactive.Testing/ReactiveTest.cs @@ -65,15 +65,13 @@ namespace Microsoft.Reactive.Testing } /// - /// Factory method for an OnCompleted notification record at a given time. + /// Factory method for an OnCompleted notification record at a given time, using inference to determine the type of . /// /// The element type for the resulting notification object. - /// An unused instance of type T, to force the compiler to infer that T as part of the method's return value. /// Recorded virtual time the OnCompleted notification occurs. + /// Object solely used to infer the type of the type parameter. This parameter is typically used when creating a sequence of anonymously typed elements. /// Recorded OnCompleted notification. - /// This overload is used for anonymous types - by passing in an instance of the type, the compiler can infer the - /// anonymous type without you having to try naming the type. - public static Recorded> OnCompleted(T dummy, long ticks) + public static Recorded> OnCompleted(long ticks, T witness) { return new Recorded>(ticks, Notification.CreateOnCompleted()); } @@ -109,19 +107,17 @@ namespace Microsoft.Reactive.Testing return new Recorded>(ticks, new OnErrorPredicate(predicate)); } - + /// - /// Factory method for an OnError notification record at a given time with a given error. + /// Factory method for an OnError notification record at a given time with a given error, using inference to determine the type of . /// /// The element type for the resulting notification object. - /// An unused instance of type T, to force the compiler to infer that T as part of the method's return value. /// Recorded virtual time the OnError notification occurs. /// Recorded exception stored in the OnError notification. + /// Object solely used to infer the type of the type parameter. This parameter is typically used when creating a sequence of anonymously typed elements. /// Recorded OnError notification. /// is null. - /// This overload is used for anonymous types - by passing in an instance of the type, the compiler can infer the - /// anonymous type without you having to try naming the type. - public static Recorded> OnError(T dummy, long ticks, Exception exception) + public static Recorded> OnError(long ticks, Exception exception, T witness) { if (exception == null) throw new ArgumentNullException("exception"); @@ -130,17 +126,15 @@ namespace Microsoft.Reactive.Testing } /// - /// Factory method for writing an assert that checks for an OnError notification record at a given time, using the specified predicate to check the exception. + /// Factory method for writing an assert that checks for an OnError notification record at a given time, using the specified predicate to check the exception and inference to determine the type of . /// /// The element type for the resulting notification object. - /// An unused instance of type T, to force the compiler to infer that T as part of the method's return value. /// Recorded virtual time the OnError notification occurs. /// Predicate function to check the OnError notification value against an expected exception. + /// Object solely used to infer the type of the type parameter. This parameter is typically used when creating a sequence of anonymously typed elements. /// Recorded OnError notification with a predicate to assert a given exception. /// is null. - /// This overload is used for anonymous types - by passing in an instance of the type, the compiler can infer the - /// anonymous type without you having to try naming the type. - public static Recorded> OnError(T dummy, long ticks, Func predicate) + public static Recorded> OnError(long ticks, Func predicate, T witness) { if (predicate == null) throw new ArgumentNullException("predicate"); diff --git a/Rx/NET/Source/Playground/Playground.csproj b/Rx/NET/Source/Playground/Playground.csproj index 3408729..30bf28d 100644 --- a/Rx/NET/Source/Playground/Playground.csproj +++ b/Rx/NET/Source/Playground/Playground.csproj @@ -77,7 +77,7 @@ {63252AE9-5186-45CA-BFCD-FA51C6B66A43} - System.Reactive + System.Reactive.Linq {C7B9D7BE-F47F-466B-A6B0-E46F1069B171} diff --git a/Rx/NET/Source/Rx.sln b/Rx/NET/Source/Rx.sln index c46be4f..a5ac016 100644 --- a/Rx/NET/Source/Rx.sln +++ b/Rx/NET/Source/Rx.sln @@ -41,17 +41,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Reactive.Experimenta EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Reactive.Debugger", "System.Reactive.Debugger\System.Reactive.Debugger.csproj", "{FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{45E85DEB-BDCC-4684-A952-187A5524750B}" + ProjectSection(SolutionItems) = preProject + .nuget\NuGet.Config = .nuget\NuGet.Config + .nuget\NuGet.exe = .nuget\NuGet.exe + .nuget\NuGet.targets = .nuget\NuGet.targets + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Reactive.Observable.Aliases", "System.Reactive.Observable.Aliases\System.Reactive.Observable.Aliases.csproj", "{9FFAC385-10A4-4DDD-B800-DE67E8469CC0}" +EndProject Global - GlobalSection(TeamFoundationVersionControl) = preSolution - SccNumberOfProjects = 1 - SccEnterpriseProvider = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} - SccTeamFoundationServer = http://tfs1:8085/tfs/interop%20team%20projects - SccProjectUniqueName0 = Playground\\Playground.csproj - SccProjectName0 = Playground - SccAuxPath0 = http://tfs1:8085/tfs/interop%20team%20projects - SccLocalPath0 = Playground - SccProvider0 = {4CA58AB2-18FA-4F8D-95D4-32DDF27D184C} - EndGlobalSection GlobalSection(TestCaseManagementSettings) = postSolution CategoryFile = Rx.vsmdi EndGlobalSection @@ -71,15 +70,12 @@ Global Debug8|Any CPU = Debug8|Any CPU Debug8|Mixed Platforms = Debug8|Mixed Platforms Debug8|x86 = Debug8|x86 - DebugCF35|Any CPU = DebugCF35|Any CPU - DebugCF35|Mixed Platforms = DebugCF35|Mixed Platforms - DebugCF35|x86 = DebugCF35|x86 DebugPL|Any CPU = DebugPL|Any CPU DebugPL|Mixed Platforms = DebugPL|Mixed Platforms DebugPL|x86 = DebugPL|x86 - DebugSL3|Any CPU = DebugSL3|Any CPU - DebugSL3|Mixed Platforms = DebugSL3|Mixed Platforms - DebugSL3|x86 = DebugSL3|x86 + DebugPLLITE|Any CPU = DebugPLLITE|Any CPU + DebugPLLITE|Mixed Platforms = DebugPLLITE|Mixed Platforms + DebugPLLITE|x86 = DebugPLLITE|x86 DebugSL4|Any CPU = DebugSL4|Any CPU DebugSL4|Mixed Platforms = DebugSL4|Mixed Platforms DebugSL4|x86 = DebugSL4|x86 @@ -92,12 +88,6 @@ Global DebugWP8|Any CPU = DebugWP8|Any CPU DebugWP8|Mixed Platforms = DebugWP8|Mixed Platforms DebugWP8|x86 = DebugWP8|x86 - DebugXBLV|Any CPU = DebugXBLV|Any CPU - DebugXBLV|Mixed Platforms = DebugXBLV|Mixed Platforms - DebugXBLV|x86 = DebugXBLV|x86 - DebugXNA4|Any CPU = DebugXNA4|Any CPU - DebugXNA4|Mixed Platforms = DebugXNA4|Mixed Platforms - DebugXNA4|x86 = DebugXNA4|x86 Release|Any CPU = Release|Any CPU Release|Mixed Platforms = Release|Mixed Platforms Release|x86 = Release|x86 @@ -113,15 +103,12 @@ Global Release8|Any CPU = Release8|Any CPU Release8|Mixed Platforms = Release8|Mixed Platforms Release8|x86 = Release8|x86 - ReleaseCF35|Any CPU = ReleaseCF35|Any CPU - ReleaseCF35|Mixed Platforms = ReleaseCF35|Mixed Platforms - ReleaseCF35|x86 = ReleaseCF35|x86 ReleasePL|Any CPU = ReleasePL|Any CPU ReleasePL|Mixed Platforms = ReleasePL|Mixed Platforms ReleasePL|x86 = ReleasePL|x86 - ReleaseSL3|Any CPU = ReleaseSL3|Any CPU - ReleaseSL3|Mixed Platforms = ReleaseSL3|Mixed Platforms - ReleaseSL3|x86 = ReleaseSL3|x86 + ReleasePLLITE|Any CPU = ReleasePLLITE|Any CPU + ReleasePLLITE|Mixed Platforms = ReleasePLLITE|Mixed Platforms + ReleasePLLITE|x86 = ReleasePLLITE|x86 ReleaseSL4|Any CPU = ReleaseSL4|Any CPU ReleaseSL4|Mixed Platforms = ReleaseSL4|Mixed Platforms ReleaseSL4|x86 = ReleaseSL4|x86 @@ -134,19 +121,13 @@ Global ReleaseWP8|Any CPU = ReleaseWP8|Any CPU ReleaseWP8|Mixed Platforms = ReleaseWP8|Mixed Platforms ReleaseWP8|x86 = ReleaseWP8|x86 - ReleaseXBLV|Any CPU = ReleaseXBLV|Any CPU - ReleaseXBLV|Mixed Platforms = ReleaseXBLV|Mixed Platforms - ReleaseXBLV|x86 = ReleaseXBLV|x86 - ReleaseXNA4|Any CPU = ReleaseXNA4|Any CPU - ReleaseXNA4|Mixed Platforms = ReleaseXNA4|Mixed Platforms - ReleaseXNA4|x86 = ReleaseXNA4|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug|x86.ActiveCfg = DebugCF35|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug35|Any CPU.Build.0 = Debug35|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU @@ -157,31 +138,26 @@ Global {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug40|x86.ActiveCfg = Debug40|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug45|Any CPU.ActiveCfg = DebugPL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug45|Any CPU.Build.0 = DebugPL|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug45|Any CPU.Build.0 = Debug45|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug45|x86.ActiveCfg = Debug45|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug8|Any CPU.ActiveCfg = DebugPL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug8|Any CPU.Build.0 = DebugPL|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug8|Any CPU.Build.0 = Debug8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Debug8|x86.ActiveCfg = Debug45|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugCF35|Any CPU.Build.0 = DebugCF35|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugCF35|Mixed Platforms.Build.0 = DebugCF35|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugCF35|x86.ActiveCfg = DebugSL3|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL3|Any CPU.Build.0 = DebugSL3|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL3|Mixed Platforms.Build.0 = DebugSL3|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU @@ -197,26 +173,16 @@ Global {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP8|Any CPU.ActiveCfg = DebugPL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP8|Any CPU.Build.0 = DebugPL|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugXBLV|Any CPU.Build.0 = DebugXBLV|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugXNA4|Any CPU.Build.0 = DebugXNA4|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release35|Any CPU.Build.0 = Release35|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU @@ -227,31 +193,26 @@ Global {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release40|x86.ActiveCfg = Release40|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release45|Any CPU.ActiveCfg = ReleasePL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release45|Any CPU.Build.0 = ReleasePL|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release45|Any CPU.ActiveCfg = Release45|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release45|Any CPU.Build.0 = Release45|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release45|x86.ActiveCfg = Release45|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release8|Any CPU.ActiveCfg = ReleasePL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release8|Any CPU.Build.0 = ReleasePL|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release8|Any CPU.ActiveCfg = Release8|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release8|Any CPU.Build.0 = Release8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.Release8|x86.ActiveCfg = Release45|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseCF35|Any CPU.Build.0 = ReleaseCF35|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseCF35|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseCF35|x86.ActiveCfg = ReleaseSL3|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL3|Any CPU.Build.0 = ReleaseSL3|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL3|Mixed Platforms.Build.0 = ReleaseSL3|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePLLITE|Mixed Platforms.Build.0 = ReleasePLLITE|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU @@ -267,26 +228,16 @@ Global {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP8|Any CPU.ActiveCfg = ReleasePL|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP8|Any CPU.Build.0 = ReleasePL|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU + {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseXBLV|Any CPU.Build.0 = ReleaseXBLV|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseXNA4|Any CPU.Build.0 = ReleaseXNA4|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseXNA4|Mixed Platforms.Build.0 = ReleaseXNA4|Any CPU - {63252AE9-5186-45CA-BFCD-FA51C6B66A43}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug|x86.ActiveCfg = DebugCF35|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug35|Any CPU.Build.0 = Debug35|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU @@ -307,17 +258,12 @@ Global {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Debug8|x86.ActiveCfg = Debug45|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugCF35|x86.ActiveCfg = DebugSL3|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL3|Any CPU.Build.0 = DebugSL3|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL3|Mixed Platforms.Build.0 = DebugSL3|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU @@ -338,19 +284,11 @@ Global {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release35|Any CPU.Build.0 = Release35|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU @@ -371,17 +309,12 @@ Global {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.Release8|x86.ActiveCfg = Release45|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseCF35|x86.ActiveCfg = ReleaseSL3|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL3|Any CPU.Build.0 = ReleaseSL3|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL3|Mixed Platforms.Build.0 = ReleaseSL3|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU @@ -402,19 +335,11 @@ Global {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseXNA4|Mixed Platforms.Build.0 = ReleaseXNA4|Any CPU - {E7B7408B-B039-4F30-B6CF-CC06218CE4CA}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug|x86.ActiveCfg = DebugCF35|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug35|Any CPU.Build.0 = Debug35|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU @@ -433,18 +358,14 @@ Global {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Debug8|x86.ActiveCfg = Debug45|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugCF35|x86.ActiveCfg = DebugSL3|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL3|Mixed Platforms.Build.0 = DebugSL3|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPLLITE|Any CPU.ActiveCfg = Debug40|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPLLITE|Any CPU.Build.0 = Debug40|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU @@ -454,28 +375,18 @@ Global {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL5|Mixed Platforms.Build.0 = DebugSL5|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugSL5|x86.ActiveCfg = DebugSL5|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP7|Any CPU.ActiveCfg = DebugWP7|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP7|Any CPU.Build.0 = DebugWP7|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release35|Any CPU.Build.0 = Release35|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU @@ -494,49 +405,34 @@ Global {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release8|Any CPU.ActiveCfg = Release8|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.Release8|x86.ActiveCfg = Release45|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseCF35|x86.ActiveCfg = ReleaseSL3|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL3|Mixed Platforms.Build.0 = ReleaseSL3|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL4|Mixed Platforms.Build.0 = ReleaseSL4|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL5|Any CPU.ActiveCfg = ReleaseSL5|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL5|Any CPU.Build.0 = ReleaseSL5|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL5|Mixed Platforms.ActiveCfg = ReleaseSL5|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL5|Mixed Platforms.Build.0 = ReleaseSL5|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseSL5|x86.ActiveCfg = ReleaseSL5|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP7|Any CPU.ActiveCfg = ReleaseWP7|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP7|Any CPU.Build.0 = ReleaseWP7|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseXNA4|Mixed Platforms.Build.0 = ReleaseXNA4|Any CPU - {2FEFC068-E2DE-43A9-A4E6-E0336A532B7A}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug|x86.ActiveCfg = DebugCF35|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug35|Any CPU.Build.0 = Debug35|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU @@ -555,17 +451,12 @@ Global {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Debug8|x86.ActiveCfg = Debug45|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugCF35|Any CPU.Build.0 = DebugCF35|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugCF35|Mixed Platforms.Build.0 = DebugCF35|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugCF35|x86.ActiveCfg = DebugSL3|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU @@ -578,18 +469,11 @@ Global {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release35|Any CPU.Build.0 = Release35|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU @@ -608,17 +492,12 @@ Global {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release8|Any CPU.ActiveCfg = Release8|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.Release8|x86.ActiveCfg = Release45|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseCF35|Any CPU.Build.0 = ReleaseCF35|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseCF35|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseCF35|x86.ActiveCfg = ReleaseSL3|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU @@ -631,18 +510,11 @@ Global {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {E32328A1-1F5B-45F9-B005-02EF5CC2CF0D}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug|x86.ActiveCfg = DebugCF35|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug35|Any CPU.Build.0 = Debug35|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU @@ -663,17 +535,12 @@ Global {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Debug8|x86.ActiveCfg = Debug45|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugCF35|x86.ActiveCfg = DebugSL3|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL3|Any CPU.Build.0 = DebugSL3|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL3|Mixed Platforms.Build.0 = DebugSL3|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU @@ -694,20 +561,11 @@ Global {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugXBLV|Any CPU.Build.0 = DebugXBLV|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release35|Any CPU.Build.0 = Release35|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU @@ -727,18 +585,13 @@ Global {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release8|Any CPU.Build.0 = Release8|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release8|x86.ActiveCfg = Release45|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseCF35|x86.ActiveCfg = ReleaseSL3|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.Release8|x86.ActiveCfg = Release8|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL3|Any CPU.Build.0 = ReleaseSL3|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL3|Mixed Platforms.Build.0 = ReleaseSL3|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU @@ -759,20 +612,11 @@ Global {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseXBLV|Any CPU.Build.0 = ReleaseXBLV|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseXNA4|Mixed Platforms.Build.0 = ReleaseXNA4|Any CPU - {2F7D32BD-5BFC-45D4-9899-F1A76DB32FCB}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug|x86.ActiveCfg = DebugCF35|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug35|Any CPU.Build.0 = Debug35|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU @@ -783,29 +627,26 @@ Global {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug40|x86.ActiveCfg = Debug40|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug45|Any CPU.ActiveCfg = DebugPL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug45|Any CPU.Build.0 = DebugPL|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug45|Any CPU.Build.0 = Debug45|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug45|x86.ActiveCfg = Debug45|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|Any CPU.ActiveCfg = DebugPL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|Any CPU.Build.0 = DebugPL|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|Any CPU.Build.0 = Debug8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|x86.ActiveCfg = Debug45|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugCF35|x86.ActiveCfg = DebugSL3|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Debug8|x86.ActiveCfg = Debug8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL3|Any CPU.Build.0 = DebugSL3|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL3|Mixed Platforms.Build.0 = DebugSL3|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU @@ -821,24 +662,16 @@ Global {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP8|Any CPU.ActiveCfg = DebugPL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP8|Any CPU.Build.0 = DebugPL|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release35|Any CPU.Build.0 = Release35|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU @@ -849,29 +682,26 @@ Global {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release40|x86.ActiveCfg = Release40|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release45|Any CPU.ActiveCfg = ReleasePL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release45|Any CPU.Build.0 = ReleasePL|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release45|Any CPU.ActiveCfg = Release45|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release45|Any CPU.Build.0 = Release45|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release45|x86.ActiveCfg = Release45|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|Any CPU.ActiveCfg = ReleasePL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|Any CPU.Build.0 = ReleasePL|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|Any CPU.ActiveCfg = Release8|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|Any CPU.Build.0 = Release8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|x86.ActiveCfg = Release45|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseCF35|x86.ActiveCfg = ReleaseSL3|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.Release8|x86.ActiveCfg = Release8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL3|Any CPU.Build.0 = ReleaseSL3|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL3|Mixed Platforms.Build.0 = ReleaseSL3|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePLLITE|Mixed Platforms.Build.0 = ReleasePLLITE|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU @@ -887,19 +717,11 @@ Global {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP8|Any CPU.ActiveCfg = ReleasePL|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP8|Any CPU.Build.0 = ReleasePL|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU + {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseXNA4|Mixed Platforms.Build.0 = ReleaseXNA4|Any CPU - {C7B9D7BE-F47F-466B-A6B0-E46F1069B171}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU {8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug|Any CPU.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug|Mixed Platforms.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug|Mixed Platforms.Build.0 = Debug|x86 @@ -923,18 +745,15 @@ Global {8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug8|Mixed Platforms.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug8|x86.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.Debug8|x86.Build.0 = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugCF35|Any CPU.ActiveCfg = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugCF35|Mixed Platforms.ActiveCfg = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugCF35|x86.ActiveCfg = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugCF35|x86.Build.0 = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPL|Any CPU.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPL|Mixed Platforms.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPL|x86.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPL|x86.Build.0 = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugSL3|Any CPU.ActiveCfg = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugSL3|Mixed Platforms.ActiveCfg = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugSL3|x86.ActiveCfg = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugSL3|x86.Build.0 = Debug|x86 + {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPLLITE|Any CPU.ActiveCfg = Debug|x86 + {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPLLITE|Mixed Platforms.ActiveCfg = Debug|x86 + {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPLLITE|Mixed Platforms.Build.0 = Debug|x86 + {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPLLITE|x86.ActiveCfg = Debug|x86 + {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugPLLITE|x86.Build.0 = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugSL4|Any CPU.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugSL4|Mixed Platforms.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugSL4|x86.ActiveCfg = Debug|x86 @@ -951,15 +770,6 @@ Global {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugWP8|Mixed Platforms.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugWP8|x86.ActiveCfg = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugWP8|x86.Build.0 = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugXBLV|x86.ActiveCfg = DebugXBLV|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugXBLV|x86.Build.0 = DebugXBLV|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugXNA4|Any CPU.ActiveCfg = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugXNA4|Mixed Platforms.ActiveCfg = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugXNA4|x86.ActiveCfg = Debug|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.DebugXNA4|x86.Build.0 = Debug|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.Release|Any CPU.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.Release|Mixed Platforms.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.Release|Mixed Platforms.Build.0 = Release|x86 @@ -981,18 +791,15 @@ Global {8A062C6B-4441-49F3-B618-4238B6AB5290}.Release8|Mixed Platforms.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.Release8|x86.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.Release8|x86.Build.0 = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseCF35|Any CPU.ActiveCfg = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseCF35|Mixed Platforms.ActiveCfg = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseCF35|x86.ActiveCfg = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseCF35|x86.Build.0 = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePL|Any CPU.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePL|Mixed Platforms.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePL|x86.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePL|x86.Build.0 = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseSL3|Any CPU.ActiveCfg = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseSL3|Mixed Platforms.ActiveCfg = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseSL3|x86.ActiveCfg = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseSL3|x86.Build.0 = Release|x86 + {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePLLITE|Any CPU.ActiveCfg = Release|x86 + {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleaseXBLV|x86 + {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePLLITE|Mixed Platforms.Build.0 = ReleaseXBLV|x86 + {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePLLITE|x86.ActiveCfg = ReleaseXBLV|x86 + {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleasePLLITE|x86.Build.0 = ReleaseXBLV|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseSL4|Any CPU.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseSL4|Mixed Platforms.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseSL4|x86.ActiveCfg = Release|x86 @@ -1009,20 +816,11 @@ Global {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseWP8|Mixed Platforms.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseWP8|x86.ActiveCfg = Release|x86 {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseWP8|x86.Build.0 = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseXBLV|x86.Build.0 = ReleaseXBLV|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseXNA4|Any CPU.ActiveCfg = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseXNA4|Mixed Platforms.ActiveCfg = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseXNA4|x86.ActiveCfg = Release|x86 - {8A062C6B-4441-49F3-B618-4238B6AB5290}.ReleaseXNA4|x86.Build.0 = Release|x86 - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug|x86.ActiveCfg = DebugCF35|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug35|x86.ActiveCfg = Debug35|Any CPU @@ -1037,15 +835,12 @@ Global {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Debug8|x86.ActiveCfg = Debug8|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugCF35|x86.ActiveCfg = DebugSL3|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU @@ -1056,21 +851,14 @@ Global {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release35|x86.ActiveCfg = Release35|Any CPU @@ -1085,15 +873,12 @@ Global {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.Release8|x86.ActiveCfg = Release8|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseCF35|x86.ActiveCfg = ReleaseSL3|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU @@ -1104,20 +889,14 @@ Global {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU + {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {EE655A70-A899-4B38-84D3-FB9F63A8C661}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug|x86.ActiveCfg = DebugCF35|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug35|Any CPU.Build.0 = Debug35|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU @@ -1128,31 +907,26 @@ Global {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug40|x86.ActiveCfg = Debug40|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug45|Any CPU.ActiveCfg = DebugPL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug45|Any CPU.Build.0 = DebugPL|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug45|Any CPU.Build.0 = Debug45|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug45|x86.ActiveCfg = Debug45|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug8|Any CPU.ActiveCfg = DebugPL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug8|Any CPU.Build.0 = DebugPL|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug8|Any CPU.Build.0 = Debug8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Debug8|x86.ActiveCfg = Debug8|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugCF35|Any CPU.Build.0 = DebugCF35|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugCF35|Mixed Platforms.Build.0 = DebugCF35|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugCF35|x86.ActiveCfg = DebugSL3|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL3|Any CPU.Build.0 = DebugSL3|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL3|Mixed Platforms.Build.0 = DebugSL3|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU @@ -1168,26 +942,16 @@ Global {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP8|Any CPU.ActiveCfg = DebugPL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP8|Any CPU.Build.0 = DebugPL|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugXBLV|Any CPU.Build.0 = DebugXBLV|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugXNA4|Any CPU.Build.0 = DebugXNA4|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release35|Any CPU.Build.0 = Release35|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU @@ -1198,31 +962,26 @@ Global {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release40|x86.ActiveCfg = Release40|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release45|Any CPU.ActiveCfg = ReleasePL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release45|Any CPU.Build.0 = ReleasePL|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release45|Any CPU.ActiveCfg = Release45|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release45|Any CPU.Build.0 = Release45|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release45|x86.ActiveCfg = Release45|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release8|Any CPU.ActiveCfg = ReleasePL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release8|Any CPU.Build.0 = ReleasePL|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release8|Any CPU.ActiveCfg = Release8|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release8|Any CPU.Build.0 = Release8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.Release8|x86.ActiveCfg = Release8|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseCF35|Any CPU.Build.0 = ReleaseCF35|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseCF35|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseCF35|x86.ActiveCfg = ReleaseSL3|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL3|Any CPU.Build.0 = ReleaseSL3|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL3|Mixed Platforms.Build.0 = ReleaseSL3|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePLLITE|Mixed Platforms.Build.0 = ReleasePLLITE|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU @@ -1238,26 +997,16 @@ Global {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP8|Any CPU.ActiveCfg = ReleasePL|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP8|Any CPU.Build.0 = ReleasePL|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU + {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseXBLV|Any CPU.Build.0 = ReleaseXBLV|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseXNA4|Any CPU.Build.0 = ReleaseXNA4|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseXNA4|Mixed Platforms.Build.0 = ReleaseXNA4|Any CPU - {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|Any CPU.Build.0 = DebugPL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|Mixed Platforms.Build.0 = DebugPL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug|x86.ActiveCfg = DebugCF35|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug35|Any CPU.Build.0 = Debug35|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU @@ -1268,31 +1017,26 @@ Global {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug40|x86.ActiveCfg = Debug40|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug45|Any CPU.ActiveCfg = DebugPL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug45|Any CPU.Build.0 = DebugPL|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug45|Any CPU.Build.0 = Debug45|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug45|x86.ActiveCfg = Debug45|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug8|Any CPU.ActiveCfg = DebugPL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug8|Any CPU.Build.0 = DebugPL|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug8|Any CPU.Build.0 = Debug8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Debug8|x86.ActiveCfg = Debug8|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugCF35|Any CPU.Build.0 = DebugCF35|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugCF35|Mixed Platforms.Build.0 = DebugCF35|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugCF35|x86.ActiveCfg = DebugSL3|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL3|Any CPU.Build.0 = DebugSL3|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL3|Mixed Platforms.Build.0 = DebugSL3|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU @@ -1308,26 +1052,16 @@ Global {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP8|Any CPU.ActiveCfg = DebugPL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP8|Any CPU.Build.0 = DebugPL|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugXBLV|Any CPU.Build.0 = DebugXBLV|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugXNA4|Any CPU.Build.0 = DebugXNA4|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|Any CPU.Build.0 = ReleasePL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|Mixed Platforms.Build.0 = ReleasePL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release35|Any CPU.Build.0 = Release35|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU @@ -1338,31 +1072,26 @@ Global {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release40|x86.ActiveCfg = Release40|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release45|Any CPU.ActiveCfg = ReleasePL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release45|Any CPU.Build.0 = ReleasePL|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release45|Any CPU.ActiveCfg = Release45|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release45|Any CPU.Build.0 = Release45|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release45|x86.ActiveCfg = Release45|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release8|Any CPU.ActiveCfg = ReleasePL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release8|Any CPU.Build.0 = ReleasePL|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release8|Any CPU.ActiveCfg = Release8|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release8|Any CPU.Build.0 = Release8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.Release8|x86.ActiveCfg = Release8|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseCF35|Any CPU.Build.0 = ReleaseCF35|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseCF35|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseCF35|x86.ActiveCfg = ReleaseSL3|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL3|Any CPU.Build.0 = ReleaseSL3|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL3|Mixed Platforms.Build.0 = ReleaseSL3|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePLLITE|Mixed Platforms.Build.0 = ReleasePLLITE|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU @@ -1378,24 +1107,16 @@ Global {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP8|Any CPU.ActiveCfg = ReleasePL|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP8|Any CPU.Build.0 = ReleasePL|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU + {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseXBLV|Any CPU.Build.0 = ReleaseXBLV|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseXNA4|Any CPU.Build.0 = ReleaseXNA4|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseXNA4|Mixed Platforms.Build.0 = ReleaseXNA4|Any CPU - {4E516F10-DA7A-4D43-963E-A93865ABEA5B}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug|Any CPU.ActiveCfg = DebugPL|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug|x86.ActiveCfg = DebugPL|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug|Mixed Platforms.Build.0 = DebugCF35|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug|x86.ActiveCfg = DebugCF35|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug35|Any CPU.ActiveCfg = Debug35|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug35|Any CPU.Build.0 = Debug35|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug35|Mixed Platforms.ActiveCfg = Debug35|Any CPU @@ -1416,18 +1137,16 @@ Global {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.Debug8|x86.ActiveCfg = Debug8|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugCF35|Any CPU.Build.0 = DebugCF35|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugCF35|Mixed Platforms.Build.0 = DebugCF35|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugCF35|x86.ActiveCfg = DebugSL3|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL3|Any CPU.Build.0 = DebugSL3|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU @@ -1448,19 +1167,11 @@ Global {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugXBLV|Any CPU.Build.0 = DebugXBLV|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugXNA4|Any CPU.Build.0 = DebugXNA4|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.Release|Any CPU.ActiveCfg = ReleasePL|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.Release|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.Release|x86.ActiveCfg = ReleasePL|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.Release|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.Release|x86.ActiveCfg = ReleaseCF35|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.Release35|Any CPU.ActiveCfg = Release35|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.Release35|Any CPU.Build.0 = Release35|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.Release35|Mixed Platforms.ActiveCfg = Release35|Any CPU @@ -1481,18 +1192,14 @@ Global {0CCCF009-763F-40D2-8655-7A94828023BF}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.Release8|x86.ActiveCfg = Release8|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseCF35|Any CPU.Build.0 = ReleaseCF35|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseCF35|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseCF35|x86.ActiveCfg = ReleaseSL3|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL3|Any CPU.Build.0 = ReleaseSL3|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU @@ -1513,16 +1220,6 @@ Global {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseXBLV|Any CPU.Build.0 = ReleaseXBLV|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseXNA4|Any CPU.Build.0 = ReleaseXNA4|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseXNA4|Mixed Platforms.Build.0 = ReleaseXNA4|Any CPU - {0CCCF009-763F-40D2-8655-7A94828023BF}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU @@ -1546,17 +1243,16 @@ Global {7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.Debug8|x86.ActiveCfg = Debug8|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugCF35|x86.ActiveCfg = DebugCF35|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU + {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU + {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL4|Mixed Platforms.Build.0 = DebugSL4|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL4|x86.ActiveCfg = DebugSL4|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL5|Any CPU.ActiveCfg = DebugSL5|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugSL5|Mixed Platforms.ActiveCfg = DebugSL5|Any CPU @@ -1567,13 +1263,6 @@ Global {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU @@ -1597,15 +1286,12 @@ Global {7A6EF49E-7946-4101-9C89-407B9C53A173}.Release8|Any CPU.ActiveCfg = Release8|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.Release8|x86.ActiveCfg = Release8|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseCF35|x86.ActiveCfg = ReleaseCF35|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseSL4|x86.ActiveCfg = ReleaseSL4|Any CPU @@ -1618,13 +1304,6 @@ Global {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {7A6EF49E-7946-4101-9C89-407B9C53A173}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU @@ -1640,31 +1319,26 @@ Global {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug40|x86.ActiveCfg = Debug40|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug45|Any CPU.ActiveCfg = DebugPL|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug45|Any CPU.Build.0 = DebugPL|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug45|Any CPU.ActiveCfg = Debug45|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug45|Any CPU.Build.0 = Debug45|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug45|Mixed Platforms.ActiveCfg = Debug45|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug45|Mixed Platforms.Build.0 = Debug45|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug45|x86.ActiveCfg = Debug45|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug8|Any CPU.ActiveCfg = DebugPL|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug8|Any CPU.Build.0 = DebugPL|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug8|Any CPU.ActiveCfg = Debug8|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug8|Any CPU.Build.0 = Debug8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Debug8|x86.ActiveCfg = Debug8|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugCF35|Any CPU.Build.0 = DebugCF35|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugCF35|Mixed Platforms.Build.0 = DebugCF35|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugCF35|x86.ActiveCfg = DebugCF35|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL3|Any CPU.Build.0 = DebugSL3|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL3|Mixed Platforms.Build.0 = DebugSL3|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU @@ -1680,21 +1354,11 @@ Global {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP7|Mixed Platforms.ActiveCfg = DebugWP7|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP7|Mixed Platforms.Build.0 = DebugWP7|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP7|x86.ActiveCfg = DebugWP7|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP8|Any CPU.ActiveCfg = DebugPL|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP8|Any CPU.Build.0 = DebugPL|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP8|Any CPU.ActiveCfg = DebugWP8|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP8|Any CPU.Build.0 = DebugWP8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugXBLV|Any CPU.Build.0 = DebugXBLV|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugXNA4|Any CPU.Build.0 = DebugXNA4|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU @@ -1710,31 +1374,26 @@ Global {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release40|x86.ActiveCfg = Release40|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release45|Any CPU.ActiveCfg = ReleasePL|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release45|Any CPU.Build.0 = ReleasePL|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release45|Any CPU.ActiveCfg = Release45|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release45|Any CPU.Build.0 = Release45|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release45|Mixed Platforms.ActiveCfg = Release45|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release45|Mixed Platforms.Build.0 = Release45|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release45|x86.ActiveCfg = Release45|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release8|Any CPU.ActiveCfg = ReleasePL|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release8|Any CPU.Build.0 = ReleasePL|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release8|Any CPU.ActiveCfg = Release8|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release8|Any CPU.Build.0 = Release8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.Release8|x86.ActiveCfg = Release8|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseCF35|Any CPU.Build.0 = ReleaseCF35|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseCF35|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseCF35|x86.ActiveCfg = ReleaseCF35|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL3|Any CPU.Build.0 = ReleaseSL3|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL3|Mixed Platforms.Build.0 = ReleaseSL3|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePLLITE|Mixed Platforms.Build.0 = ReleasePLLITE|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU @@ -1750,21 +1409,11 @@ Global {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP7|Mixed Platforms.ActiveCfg = ReleaseWP7|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP7|Mixed Platforms.Build.0 = ReleaseWP7|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP7|x86.ActiveCfg = ReleaseWP7|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP8|Any CPU.ActiveCfg = ReleasePL|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP8|Any CPU.Build.0 = ReleasePL|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP8|Any CPU.ActiveCfg = ReleaseWP8|Any CPU + {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP8|Any CPU.Build.0 = ReleaseWP8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseXBLV|Any CPU.Build.0 = ReleaseXBLV|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseXNA4|Any CPU.Build.0 = ReleaseXNA4|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseXNA4|Mixed Platforms.Build.0 = ReleaseXNA4|Any CPU - {41E65B96-733B-41C4-A1BB-7476359B89EB}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug|Any CPU.ActiveCfg = DebugCF35|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug|Any CPU.Build.0 = DebugCF35|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU @@ -1790,21 +1439,15 @@ Global {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug8|Mixed Platforms.ActiveCfg = Debug8|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug8|Mixed Platforms.Build.0 = Debug8|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Debug8|x86.ActiveCfg = Debug8|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugCF35|Any CPU.ActiveCfg = DebugCF35|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugCF35|Any CPU.Build.0 = DebugCF35|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugCF35|Mixed Platforms.ActiveCfg = DebugCF35|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugCF35|Mixed Platforms.Build.0 = DebugCF35|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugCF35|x86.ActiveCfg = DebugCF35|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPL|Any CPU.ActiveCfg = DebugPL|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPL|Any CPU.Build.0 = DebugPL|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPL|Mixed Platforms.ActiveCfg = DebugPL|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPL|Mixed Platforms.Build.0 = DebugPL|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPL|x86.ActiveCfg = DebugPL|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL3|Any CPU.ActiveCfg = DebugSL3|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL3|Any CPU.Build.0 = DebugSL3|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL3|Mixed Platforms.ActiveCfg = DebugSL3|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL3|Mixed Platforms.Build.0 = DebugSL3|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL3|x86.ActiveCfg = DebugSL3|Any CPU + {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPLLITE|Any CPU.ActiveCfg = DebugPLLITE|Any CPU + {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPLLITE|Any CPU.Build.0 = DebugPLLITE|Any CPU + {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPLLITE|Mixed Platforms.ActiveCfg = DebugPLLITE|Any CPU + {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPLLITE|Mixed Platforms.Build.0 = DebugPLLITE|Any CPU + {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugPLLITE|x86.ActiveCfg = DebugPLLITE|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL4|Any CPU.ActiveCfg = DebugSL4|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL4|Any CPU.Build.0 = DebugSL4|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugSL4|Mixed Platforms.ActiveCfg = DebugSL4|Any CPU @@ -1825,16 +1468,6 @@ Global {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugWP8|Mixed Platforms.ActiveCfg = DebugWP8|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugWP8|Mixed Platforms.Build.0 = DebugWP8|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugWP8|x86.ActiveCfg = DebugWP8|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugXBLV|Any CPU.ActiveCfg = DebugXBLV|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugXBLV|Any CPU.Build.0 = DebugXBLV|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugXBLV|Mixed Platforms.ActiveCfg = DebugXBLV|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugXBLV|Mixed Platforms.Build.0 = DebugXBLV|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugXBLV|x86.ActiveCfg = DebugXBLV|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugXNA4|Any CPU.ActiveCfg = DebugXNA4|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugXNA4|Any CPU.Build.0 = DebugXNA4|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugXNA4|Mixed Platforms.ActiveCfg = DebugXNA4|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugXNA4|Mixed Platforms.Build.0 = DebugXNA4|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.DebugXNA4|x86.ActiveCfg = DebugXNA4|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release|Any CPU.ActiveCfg = ReleaseCF35|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release|Any CPU.Build.0 = ReleaseCF35|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU @@ -1860,21 +1493,15 @@ Global {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release8|Mixed Platforms.ActiveCfg = Release8|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release8|Mixed Platforms.Build.0 = Release8|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.Release8|x86.ActiveCfg = Release8|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseCF35|Any CPU.ActiveCfg = ReleaseCF35|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseCF35|Any CPU.Build.0 = ReleaseCF35|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseCF35|Mixed Platforms.ActiveCfg = ReleaseCF35|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseCF35|Mixed Platforms.Build.0 = ReleaseCF35|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseCF35|x86.ActiveCfg = ReleaseCF35|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePL|Any CPU.ActiveCfg = ReleasePL|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePL|Any CPU.Build.0 = ReleasePL|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePL|Mixed Platforms.ActiveCfg = ReleasePL|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePL|Mixed Platforms.Build.0 = ReleasePL|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePL|x86.ActiveCfg = ReleasePL|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL3|Any CPU.ActiveCfg = ReleaseSL3|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL3|Any CPU.Build.0 = ReleaseSL3|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL3|Mixed Platforms.ActiveCfg = ReleaseSL3|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL3|Mixed Platforms.Build.0 = ReleaseSL3|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL3|x86.ActiveCfg = ReleaseSL3|Any CPU + {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePLLITE|Any CPU.ActiveCfg = ReleasePLLITE|Any CPU + {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePLLITE|Any CPU.Build.0 = ReleasePLLITE|Any CPU + {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePLLITE|Mixed Platforms.ActiveCfg = ReleasePLLITE|Any CPU + {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePLLITE|Mixed Platforms.Build.0 = ReleasePLLITE|Any CPU + {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleasePLLITE|x86.ActiveCfg = ReleasePLLITE|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL4|Any CPU.ActiveCfg = ReleaseSL4|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL4|Any CPU.Build.0 = ReleaseSL4|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseSL4|Mixed Platforms.ActiveCfg = ReleaseSL4|Any CPU @@ -1895,16 +1522,108 @@ Global {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseWP8|Mixed Platforms.ActiveCfg = ReleaseWP8|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseWP8|Mixed Platforms.Build.0 = ReleaseWP8|Any CPU {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseWP8|x86.ActiveCfg = ReleaseWP8|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseXBLV|Any CPU.ActiveCfg = ReleaseXBLV|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseXBLV|Any CPU.Build.0 = ReleaseXBLV|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseXBLV|Mixed Platforms.ActiveCfg = ReleaseXBLV|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseXBLV|Mixed Platforms.Build.0 = ReleaseXBLV|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseXBLV|x86.ActiveCfg = ReleaseXBLV|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseXNA4|Any CPU.ActiveCfg = ReleaseXNA4|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseXNA4|Any CPU.Build.0 = ReleaseXNA4|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseXNA4|Mixed Platforms.ActiveCfg = ReleaseXNA4|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseXNA4|Mixed Platforms.Build.0 = ReleaseXNA4|Any CPU - {FFB7A57C-BC22-4B71-88D4-2489B3FF10B6}.ReleaseXNA4|x86.ActiveCfg = ReleaseXNA4|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug35|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug35|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug35|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug35|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug35|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug40|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug40|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug40|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug40|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug40|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug45|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug45|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug45|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug45|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug45|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug8|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug8|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug8|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug8|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Debug8|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPL|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPL|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPL|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPL|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPL|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPLLITE|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPLLITE|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPLLITE|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPLLITE|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugPLLITE|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL4|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL4|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL4|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL4|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL4|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL5|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL5|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL5|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL5|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugSL5|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP7|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP7|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP7|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP7|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP7|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP8|Any CPU.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP8|Any CPU.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP8|Mixed Platforms.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP8|Mixed Platforms.Build.0 = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.DebugWP8|x86.ActiveCfg = Debug40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release|Any CPU.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release|Any CPU.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release|x86.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release35|Any CPU.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release35|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release35|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release35|x86.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release40|Any CPU.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release40|Any CPU.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release40|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release40|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release40|x86.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release45|Any CPU.ActiveCfg = Release45|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release45|Any CPU.Build.0 = Release45|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release45|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release45|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release45|x86.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release8|Any CPU.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release8|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release8|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.Release8|x86.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePL|Any CPU.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePL|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePL|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePL|x86.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePLLITE|Any CPU.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePLLITE|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePLLITE|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleasePLLITE|x86.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL4|Any CPU.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL4|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL4|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL4|x86.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL5|Any CPU.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL5|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL5|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseSL5|x86.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP7|Any CPU.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP7|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP7|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP7|x86.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP8|Any CPU.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP8|Mixed Platforms.ActiveCfg = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP8|Mixed Platforms.Build.0 = Release40|Any CPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0}.ReleaseWP8|x86.ActiveCfg = Release40|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Rx/NET/Source/System.Reactive.Core/Properties/AssemblyInfo.cs b/Rx/NET/Source/System.Reactive.Core/Properties/AssemblyInfo.cs index 85d1da3..b37d0e0 100644 --- a/Rx/NET/Source/System.Reactive.Core/Properties/AssemblyInfo.cs +++ b/Rx/NET/Source/System.Reactive.Core/Properties/AssemblyInfo.cs @@ -27,11 +27,11 @@ using System.Security; [assembly: AllowPartiallyTrustedCallers] #endif -#if XBOX_LAKEVIEW -[assembly: SecurityTransparent] -#endif +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== -// -// Note: Assembly (file) version numbers get inserted by the build system on the fly. Inspect the Team Build workflows -// and the custom activity in Build/Source/Activities/AppendVersionInfo.cs for more information. -// +[assembly: AssemblyVersion("2.2.0.0")] +[assembly: AssemblyFileVersion("2.2.0.0")] +[assembly: AssemblyInformationalVersion("2.2.0.0")] diff --git a/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/ConcurrencyAbstractionLayer.Default.cs b/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/ConcurrencyAbstractionLayer.Default.cs index cc9cd57..b3ec5be 100644 --- a/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/ConcurrencyAbstractionLayer.Default.cs +++ b/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/ConcurrencyAbstractionLayer.Default.cs @@ -22,16 +22,21 @@ namespace System.Reactive.Concurrency public IDisposable StartPeriodicTimer(Action action, TimeSpan period) { - // - // MSDN documentation states the following: - // - // "If period is zero (0) or negative one (-1) milliseconds and dueTime is positive, callback is invoked once; - // the periodic behavior of the timer is disabled, but can be re-enabled using the Change method." - // - if (period <= TimeSpan.Zero) + if (period < TimeSpan.Zero) throw new ArgumentOutOfRangeException("period"); - return new PeriodicTimer(action, period); + // + // The contract for periodic scheduling in Rx is that specifying TimeSpan.Zero as the period causes the scheduler to + // call back periodically as fast as possible, sequentially. + // + if (period == TimeSpan.Zero) + { + return new FastPeriodicTimer(action); + } + else + { + return new PeriodicTimer(action, period); + } } public IDisposable QueueUserWorkItem(Action action, object state) @@ -362,6 +367,37 @@ namespace System.Reactive.Concurrency } } #endif + + class FastPeriodicTimer : IDisposable + { + private readonly Action _action; + private bool disposed; + + public FastPeriodicTimer(Action action) + { + _action = action; + + new System.Threading.Thread(Loop) + { + Name = "Rx-FastPeriodicTimer", + IsBackground = true + } + .Start(); + } + + private void Loop() + { + while (!disposed) + { + _action(); + } + } + + public void Dispose() + { + disposed = true; + } + } } } #else @@ -375,8 +411,12 @@ namespace System.Reactive.Concurrency { public IDisposable StartTimer(Action action, object state, TimeSpan dueTime) { - var cancel = new CancellationDisposable(); + var cancel = new CancellationDisposable(); +#if USE_TASKEX + TaskEx.Delay(dueTime, cancel.Token).ContinueWith( +#else Task.Delay(dueTime, cancel.Token).ContinueWith( +#endif _ => action(state), TaskContinuationOptions.ExecuteSynchronously | TaskContinuationOptions.OnlyOnRanToCompletion ); @@ -385,24 +425,35 @@ namespace System.Reactive.Concurrency public IDisposable StartPeriodicTimer(Action action, TimeSpan period) { - var cancel = new CancellationDisposable(); - - var moveNext = default(Action); - moveNext = () => + if (period <= TimeSpan.Zero) { - Task.Delay(period, cancel.Token).ContinueWith( - _ => - { - moveNext(); - action(); - }, - TaskContinuationOptions.ExecuteSynchronously | TaskContinuationOptions.OnlyOnRanToCompletion - ); - }; - - moveNext(); + return new FastPeriodicTimer(action); + } + else + { + var cancel = new CancellationDisposable(); - return cancel; + var moveNext = default(Action); + moveNext = () => + { +#if USE_TASKEX + TaskEx.Delay(period, cancel.Token).ContinueWith( +#else + Task.Delay(period, cancel.Token).ContinueWith( +#endif + _ => + { + moveNext(); + action(); + }, + TaskContinuationOptions.ExecuteSynchronously | TaskContinuationOptions.OnlyOnRanToCompletion + ); + }; + + moveNext(); + + return cancel; + } } public IDisposable QueueUserWorkItem(Action action, object state) @@ -414,7 +465,12 @@ namespace System.Reactive.Concurrency public void Sleep(TimeSpan timeout) { +#if USE_TASKEX + TaskEx.Delay(timeout).Wait(); +#else Task.Delay(timeout).Wait(); +#endif + } public IStopwatch StartStopwatch() @@ -434,6 +490,32 @@ namespace System.Reactive.Concurrency action(state); }, TaskCreationOptions.LongRunning); } + + class FastPeriodicTimer : IDisposable + { + private readonly Action _action; + private bool disposed; + + public FastPeriodicTimer(Action action) + { + _action = action; + + Task.Factory.StartNew(Loop, TaskCreationOptions.LongRunning); + } + + private void Loop() + { + while (!disposed) + { + _action(); + } + } + + public void Dispose() + { + disposed = true; + } + } } } #endif \ No newline at end of file diff --git a/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/LocalScheduler.TimerQueue.cs b/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/LocalScheduler.TimerQueue.cs index ded2b28..7518037 100644 --- a/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/LocalScheduler.TimerQueue.cs +++ b/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/LocalScheduler.TimerQueue.cs @@ -93,6 +93,11 @@ namespace System.Reactive.Concurrency /// private static readonly TimeSpan RETRYSHORT = TimeSpan.FromMilliseconds(50); + /// + /// Longest interval supported by . + /// + private static readonly TimeSpan MAXSUPPORTEDTIMER = TimeSpan.FromMilliseconds((1L << 32) - 2); + [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1810:InitializeReferenceTypeStaticFieldsInline", Justification = "We can't really lift this into a field initializer, and would end up checking for an initialization flag in every static method anyway (which is roughly what the JIT does in a thread-safe manner).")] static LocalScheduler() { @@ -317,8 +322,13 @@ namespace System.Reactive.Concurrency var remainder = TimeSpan.FromTicks(Math.Max(due.Ticks / MAXERRORRATIO, LONGTOSHORT.Ticks)); var dueEarly = due - remainder; + // + // Limit the interval to maximum supported by underlying Timer. + // + var dueCapped = TimeSpan.FromTicks(Math.Min(dueEarly.Ticks, MAXSUPPORTEDTIMER.Ticks)); + s_nextLongTermWorkItem = next; - s_nextLongTermTimer.Disposable = ConcurrencyAbstractionLayer.Current.StartTimer(EvaluateLongTermQueue, null, dueEarly); + s_nextLongTermTimer.Disposable = ConcurrencyAbstractionLayer.Current.StartTimer(EvaluateLongTermQueue, null, dueCapped); } } diff --git a/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/Synchronization.ObserveOn.cs b/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/Synchronization.ObserveOn.cs index 7fd80d0..20a8a40 100644 --- a/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/Synchronization.ObserveOn.cs +++ b/Rx/NET/Source/System.Reactive.Core/Reactive/Concurrency/Synchronization.ObserveOn.cs @@ -35,7 +35,7 @@ namespace System.Reactive.Concurrency #if !NO_SYNCCTX if (_context != null) { - var sink = new ς(this, observer, cancel); + var sink = new ObserveOnSink(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -49,11 +49,11 @@ namespace System.Reactive.Concurrency } #if !NO_SYNCCTX - class ς : Sink, IObserver + class ObserveOnSink : Sink, IObserver { private readonly ObserveOn _parent; - public ς(ObserveOn parent, IObserver observer, IDisposable cancel) + public ObserveOnSink(ObserveOn parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/ConcurrentDictionary.cs b/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/ConcurrentDictionary.cs index 8b7ec81..25e3957 100644 --- a/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/ConcurrentDictionary.cs +++ b/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/ConcurrentDictionary.cs @@ -99,6 +99,8 @@ namespace System.Collections.Concurrent public ConcurrentDictionary(IEqualityComparer comparer) : this(DefaultConcurrencyLevel, DEFAULT_CAPACITY, true, comparer) { } + public ConcurrentDictionary(int capacity, IEqualityComparer comparer) : this(DefaultConcurrencyLevel, capacity, true, comparer) { } + internal ConcurrentDictionary(int concurrencyLevel, int capacity, bool growLockArray, IEqualityComparer comparer) { if (concurrencyLevel < 1) diff --git a/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/PlatformEnlightenmentProvider.cs b/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/PlatformEnlightenmentProvider.cs index f2483e8..26d29d8 100644 --- a/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/PlatformEnlightenmentProvider.cs +++ b/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/PlatformEnlightenmentProvider.cs @@ -60,7 +60,7 @@ namespace System.Reactive.PlatformServices #if NETCF35 var name = "System.Reactive.PlatformServices.CurrentPlatformEnlightenmentProvider, System.Reactive.PlatformServices"; #else -#if CRIPPLED_REFLECTION +#if CRIPPLED_REFLECTION && HAS_WINRT var ifType = typeof(IPlatformEnlightenmentProvider).GetTypeInfo(); #else var ifType = typeof(IPlatformEnlightenmentProvider); diff --git a/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/Semaphore.Silverlight.cs b/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/Semaphore.Silverlight.cs index 4f5eeee..d73a81f 100644 --- a/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/Semaphore.Silverlight.cs +++ b/Rx/NET/Source/System.Reactive.Core/Reactive/Internal/Semaphore.Silverlight.cs @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -#if NO_SEMAPHORE && SILVERLIGHT +#if NO_SEMAPHORE && (SILVERLIGHT || PLIB_LITE) using System; using System.Threading; diff --git a/Rx/NET/Source/System.Reactive.Core/Strings_Core.Generated.cs b/Rx/NET/Source/System.Reactive.Core/Strings_Core.Generated.cs index 3e9a82e..409a50d 100644 --- a/Rx/NET/Source/System.Reactive.Core/Strings_Core.Generated.cs +++ b/Rx/NET/Source/System.Reactive.Core/Strings_Core.Generated.cs @@ -53,7 +53,7 @@ namespace System.Reactive { if (object.ReferenceEquals(resourceMan, null)) { -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("System.Reactive.Strings_Core", typeof(Strings_Core).GetTypeInfo().Assembly); #else global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("System.Reactive.Strings_Core", typeof(Strings_Core).Assembly); diff --git a/Rx/NET/Source/System.Reactive.Core/System.Reactive.Core.csproj b/Rx/NET/Source/System.Reactive.Core/System.Reactive.Core.csproj index a6938ff..ebf057a 100644 --- a/Rx/NET/Source/System.Reactive.Core/System.Reactive.Core.csproj +++ b/Rx/NET/Source/System.Reactive.Core/System.Reactive.Core.csproj @@ -12,6 +12,8 @@ 512 true ..\Rx.ruleset + ..\ + true bin\ReleaseXBLV\ @@ -119,5 +121,14 @@ + + + + + + + + + \ No newline at end of file diff --git a/Rx/NET/Source/System.Reactive.Core/packages.config b/Rx/NET/Source/System.Reactive.Core/packages.config new file mode 100644 index 0000000..82d2e60 --- /dev/null +++ b/Rx/NET/Source/System.Reactive.Core/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Rx/NET/Source/System.Reactive.Debugger/Properties/AssemblyInfo.cs b/Rx/NET/Source/System.Reactive.Debugger/Properties/AssemblyInfo.cs index e1a4c79..2932d06 100644 --- a/Rx/NET/Source/System.Reactive.Debugger/Properties/AssemblyInfo.cs +++ b/Rx/NET/Source/System.Reactive.Debugger/Properties/AssemblyInfo.cs @@ -27,11 +27,11 @@ using System.Security; [assembly: AllowPartiallyTrustedCallers] #endif -#if XBOX_LAKEVIEW -[assembly: SecurityTransparent] -#endif +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== -// -// Note: Assembly (file) version numbers get inserted by the build system on the fly. Inspect the Team Build workflows -// and the custom activity in Build/Source/Activities/AppendVersionInfo.cs for more information. -// +[assembly: AssemblyVersion("2.2.0.0")] +[assembly: AssemblyFileVersion("2.2.0.0")] +[assembly: AssemblyInformationalVersion("2.2.0.0")] diff --git a/Rx/NET/Source/System.Reactive.Debugger/System.Reactive.Debugger.csproj b/Rx/NET/Source/System.Reactive.Debugger/System.Reactive.Debugger.csproj index 87ca262..87e97db 100644 --- a/Rx/NET/Source/System.Reactive.Debugger/System.Reactive.Debugger.csproj +++ b/Rx/NET/Source/System.Reactive.Debugger/System.Reactive.Debugger.csproj @@ -12,6 +12,7 @@ 512 true ..\Rx.ruleset + ..\ bin\ReleaseXBLV\ @@ -56,4 +57,5 @@ + \ No newline at end of file diff --git a/Rx/NET/Source/System.Reactive.Experimental/Properties/AssemblyInfo.cs b/Rx/NET/Source/System.Reactive.Experimental/Properties/AssemblyInfo.cs index 1cd8857..c391996 100644 --- a/Rx/NET/Source/System.Reactive.Experimental/Properties/AssemblyInfo.cs +++ b/Rx/NET/Source/System.Reactive.Experimental/Properties/AssemblyInfo.cs @@ -28,11 +28,11 @@ using System.Security; [assembly: AllowPartiallyTrustedCallers] #endif -#if XBOX_LAKEVIEW -[assembly: SecurityTransparent] -#endif +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== -// -// Note: Assembly (file) version numbers get inserted by the build system on the fly. Inspect the Team Build workflows -// and the custom activity in Build/Source/Activities/AppendVersionInfo.cs for more information. -// +[assembly: AssemblyVersion("2.2.0.0")] +[assembly: AssemblyFileVersion("2.2.0.0")] +[assembly: AssemblyInformationalVersion("2.2.0.0")] diff --git a/Rx/NET/Source/System.Reactive.Experimental/Reactive/Linq/QbservableEx.Generated.cs b/Rx/NET/Source/System.Reactive.Experimental/Reactive/Linq/QbservableEx.Generated.cs index 4903e30..8103f32 100644 --- a/Rx/NET/Source/System.Reactive.Experimental/Reactive/Linq/QbservableEx.Generated.cs +++ b/Rx/NET/Source/System.Reactive.Experimental/Reactive/Linq/QbservableEx.Generated.cs @@ -1,5 +1,6 @@ /* - * WARNING: Auto-generated file (8/5/2012 1:55:31 PM) + * WARNING: Auto-generated file (11/21/2013 11:07:25 AM) + * Run Rx's auto-homoiconizer tool to generate this file (in the HomoIcon directory). */ #pragma warning disable 1591 diff --git a/Rx/NET/Source/System.Reactive.Experimental/System.Reactive.Experimental.csproj b/Rx/NET/Source/System.Reactive.Experimental/System.Reactive.Experimental.csproj index b860492..2c80a0d 100644 --- a/Rx/NET/Source/System.Reactive.Experimental/System.Reactive.Experimental.csproj +++ b/Rx/NET/Source/System.Reactive.Experimental/System.Reactive.Experimental.csproj @@ -12,6 +12,7 @@ 512 true ..\Rx.ruleset + ..\ bin\ReleaseXBLV\ @@ -56,4 +57,5 @@ + \ No newline at end of file diff --git a/Rx/NET/Source/System.Reactive.Interfaces/IObservable.cs b/Rx/NET/Source/System.Reactive.Interfaces/IObservable.cs index f1b62d2..ae67bc7 100644 --- a/Rx/NET/Source/System.Reactive.Interfaces/IObservable.cs +++ b/Rx/NET/Source/System.Reactive.Interfaces/IObservable.cs @@ -18,4 +18,7 @@ namespace System IDisposable Subscribe(IObserver observer); } } -#endif \ No newline at end of file +#elif !WINDOWSPHONE7 // TypeForwardedTo is not presen on windows phone 7 so we can't really target +[assembly: System.Runtime.CompilerServices.TypeForwardedTo(typeof(System.IObservable<>))] +#endif + diff --git a/Rx/NET/Source/System.Reactive.Interfaces/IObserver.cs b/Rx/NET/Source/System.Reactive.Interfaces/IObserver.cs index 6ed6c58..e157410 100644 --- a/Rx/NET/Source/System.Reactive.Interfaces/IObserver.cs +++ b/Rx/NET/Source/System.Reactive.Interfaces/IObserver.cs @@ -30,4 +30,6 @@ namespace System void OnCompleted(); } } +#elif !WINDOWSPHONE7 // TypeForwardedTo is not presen on windows phone 7 so we can't really target +[assembly: System.Runtime.CompilerServices.TypeForwardedTo(typeof(System.IObserver<>))] #endif \ No newline at end of file diff --git a/Rx/NET/Source/System.Reactive.Interfaces/Properties/AssemblyInfo.cs b/Rx/NET/Source/System.Reactive.Interfaces/Properties/AssemblyInfo.cs index fd916fa..0cbc40b 100644 --- a/Rx/NET/Source/System.Reactive.Interfaces/Properties/AssemblyInfo.cs +++ b/Rx/NET/Source/System.Reactive.Interfaces/Properties/AssemblyInfo.cs @@ -27,13 +27,11 @@ using System.Security; [assembly: AllowPartiallyTrustedCallers] #endif -#if XBOX_LAKEVIEW -[assembly: SecurityTransparent] -#endif +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== -// -// Starting with v2.0 RC, we're bumping this file's version number, -// because MSI wouldn't pick it up as an update otherwise... -// -//[assembly: AssemblyVersion("2.0.0.0")] -//[assembly: AssemblyFileVersion("2.0.0.0")] +[assembly: AssemblyVersion("2.2.0.0")] +[assembly: AssemblyFileVersion("2.2.0.0")] +[assembly: AssemblyInformationalVersion("2.2.0.0")] diff --git a/Rx/NET/Source/System.Reactive.Interfaces/System.Reactive.Interfaces.csproj b/Rx/NET/Source/System.Reactive.Interfaces/System.Reactive.Interfaces.csproj index 02851a7..86efc2f 100644 --- a/Rx/NET/Source/System.Reactive.Interfaces/System.Reactive.Interfaces.csproj +++ b/Rx/NET/Source/System.Reactive.Interfaces/System.Reactive.Interfaces.csproj @@ -12,6 +12,7 @@ 512 true ..\Rx.ruleset + ..\ bin\ReleaseXBLV\ @@ -57,4 +58,5 @@ + \ No newline at end of file diff --git a/Rx/NET/Source/System.Reactive.Linq/GlobalSuppressions.cs b/Rx/NET/Source/System.Reactive.Linq/GlobalSuppressions.cs index e0088a2..d05b514 100644 --- a/Rx/NET/Source/System.Reactive.Linq/GlobalSuppressions.cs +++ b/Rx/NET/Source/System.Reactive.Linq/GlobalSuppressions.cs @@ -15,169 +15,169 @@ [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1020:AvoidNamespacesWithFewTypes", Scope = "namespace", Target = "System.Reactive.Threading.Tasks", Justification = "By design.")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA2210:AssembliesShouldHaveValidStrongNames", Justification = "Taken care of by lab build.")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1016:MarkAssembliesWithAssemblyVersion", Justification = "Taken care of by lab build.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AddRef`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Aggregate`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Aggregate`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.All`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Amb`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Any`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AsObservable`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AverageDecimal.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AverageDecimalNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AverageDouble.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AverageDoubleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AverageInt32.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AverageInt32Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AverageInt64.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AverageInt64Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AverageSingle.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.AverageSingleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Buffer`2.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Buffer`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Cast`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Catch`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Catch`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`17.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`16.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`15.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`14.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`13.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`12.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`11.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`10.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`9.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`8.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`7.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`6.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`5.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`4.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`3.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CombineLatest`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Concat`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Contains`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.CountObservαble`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.DefaultIfEmpty`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Defer`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Delay`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Delay`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.DelaySubscription`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0", Scope = "member", Target = "System.Reactive.Linq.Observαble.Dematerialize`1+_.#OnNext(System.Reactive.Notification`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Dematerialize`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Distinct`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.DistinctUntilChanged`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Do`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AddRef`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Aggregate`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Aggregate`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.All`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Amb`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Any`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AsObservable`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AverageDecimal.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AverageDecimalNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AverageDouble.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AverageDoubleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AverageInt32.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AverageInt32Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AverageInt64.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AverageInt64Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AverageSingle.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.AverageSingleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Buffer`2.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Buffer`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Cast`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Catch`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Catch`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`17.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`16.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`15.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`14.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`13.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`12.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`11.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`10.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`9.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`8.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`7.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`6.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`5.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`4.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`3.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.CombineLatest`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Concat`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Contains`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Count`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.DefaultIfEmpty`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Defer`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Delay`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Delay`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.DelaySubscription`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Dematerialize`1+_.#OnNext(System.Reactive.Notification`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Dematerialize`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Distinct`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.DistinctUntilChanged`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Do`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0", Scope = "member", Target = "System.Reactive.Either`2+Left.#Switch(System.Action`1,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0", Scope = "member", Target = "System.Reactive.Either`2+Left.#Switch`1(System.Func`2,System.Func`2)", Justification = "Producer cannot pass null to setSink parameter.")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "1", Scope = "member", Target = "System.Reactive.Either`2+Right.#Switch(System.Action`1,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "1", Scope = "member", Target = "System.Reactive.Either`2+Right.#Switch`1(System.Func`2,System.Func`2)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.ElementAt`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Empty`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Finally`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.FirstAsync`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Generate`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.GroupBy`3.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.GroupByUntil`4.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.GroupJoin`5.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.IgnoreElements`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.IsEmpty`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Join`5.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.ElementAt`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Empty`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Finally`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.FirstAsync`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Generate`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.GroupBy`3.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.GroupByUntil`4.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.GroupJoin`5.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.IgnoreElements`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.IsEmpty`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Join`5.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] [assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "0", Scope = "member", Target = "System.Reactive.Joins.JoinObserver`1.#OnNextCore(System.Reactive.Notification`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.LastAsync`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.LongCountObservαble`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Materialize`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Max`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxBy`2.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxDecimal.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxDecimalNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxDouble.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxDoubleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxInt32.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxInt32Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxInt64.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxInt64Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxSingle.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MaxSingleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Merge`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Min`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinBy`2.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinDecimal.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinDecimalNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinDouble.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinDoubleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinInt32.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinInt32Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinInt64.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinInt64Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinSingle.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.MinSingleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Multicast`3.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.OfType`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.OnErrorResumeNext`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Range.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.RefCount`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Repeat`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Return`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Sample`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Sample`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Scan`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Scan`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Select`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SelectMany`3.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SelectMany`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SequenceEqual`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SingleAsync`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Skip`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SkipLast`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SkipUntil`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SkipUntil`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SkipWhile`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SumDecimal.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SumDecimalNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SumDouble.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SumDoubleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SumInt32.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SumInt32Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SumInt64.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SumInt64Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SumSingle.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.SumSingleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Switch`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Take`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.TakeLast`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.TakeUntil`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.TakeUntil`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.TakeWhile`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Throttle`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Throttle`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Throw`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.TimeInterval`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Timeout`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Timeout`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Timer.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Timestamp`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.ToArray`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.ToDictionary`3.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.ToList`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.ToLookup`3.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.ToObservable`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Using`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Where`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Window`2.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Window`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`17.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`16.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`15.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`14.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`13.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`12.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`11.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`10.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`9.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`8.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`7.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`6.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`4.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`3.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.Observαble.Zip`5.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] -[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly", Scope = "member", Target = "System.Reactive.Linq.Observαble.ElementAt`1+_.#OnCompleted()", Justification = "Asynchronous behavior; no more index parameter in scope.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.LastAsync`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.LongCount`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Materialize`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Max`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxBy`2.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxDecimal.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxDecimalNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxDouble.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxDoubleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxInt32.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxInt32Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxInt64.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxInt64Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxSingle.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MaxSingleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Merge`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Min`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinBy`2.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinDecimal.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinDecimalNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinDouble.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinDoubleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinInt32.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinInt32Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinInt64.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinInt64Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinSingle.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.MinSingleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Multicast`3.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.OfType`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.OnErrorResumeNext`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Range.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.RefCount`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Repeat`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Return`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Sample`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Sample`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Scan`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Scan`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Select`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SelectMany`3.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SelectMany`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SequenceEqual`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SingleAsync`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Skip`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SkipLast`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SkipUntil`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SkipUntil`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SkipWhile`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SumDecimal.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SumDecimalNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SumDouble.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SumDoubleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SumInt32.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SumInt32Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SumInt64.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SumInt64Nullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SumSingle.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.SumSingleNullable.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Switch`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Take`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.TakeLast`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.TakeUntil`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.TakeUntil`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.TakeWhile`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Throttle`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Throttle`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Throw`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.TimeInterval`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Timeout`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Timeout`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Timer.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Timestamp`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.ToArray`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.ToDictionary`3.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.ToList`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.ToLookup`3.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.ToObservable`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Using`2.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Where`1.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Window`2.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Window`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`17.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`16.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`15.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`14.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`13.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`12.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`11.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`10.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`9.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`8.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`7.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`6.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`4.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`3.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`1.#Run(System.IObserver`1>,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1062:Validate arguments of public methods", MessageId = "2", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.Zip`5.#Run(System.IObserver`1,System.IDisposable,System.Action`1)", Justification = "Producer cannot pass null to setSink parameter.")] +[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly", Scope = "member", Target = "System.Reactive.Linq.ObservableImpl.ElementAt`1+_.#OnCompleted()", Justification = "Asynchronous behavior; no more index parameter in scope.")] diff --git a/Rx/NET/Source/System.Reactive.Linq/Properties/AssemblyInfo.cs b/Rx/NET/Source/System.Reactive.Linq/Properties/AssemblyInfo.cs index a4b081a..9b1065e 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Properties/AssemblyInfo.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Properties/AssemblyInfo.cs @@ -27,11 +27,12 @@ using System.Security; [assembly: AllowPartiallyTrustedCallers] #endif -#if XBOX_LAKEVIEW -[assembly: SecurityTransparent] -#endif +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== + +[assembly: AssemblyVersion("2.2.0.0")] +[assembly: AssemblyFileVersion("2.2.0.0")] +[assembly: AssemblyInformationalVersion("2.2.0.0")] -// -// Note: Assembly (file) version numbers get inserted by the build system on the fly. Inspect the Team Build workflows -// and the custom activity in Build/Source/Activities/AppendVersionInfo.cs for more information. -// diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Internal/Helpers.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Internal/Helpers.cs index dee33fb..5a6e1e2 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Internal/Helpers.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Internal/Helpers.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; using System.Collections.Generic; -using System.Reactive.Linq.Observαble; +using System.Reactive.Linq.ObservableImpl; namespace System.Reactive { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Internal/ReflectionUtils.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Internal/ReflectionUtils.cs index effdd08..34dec93 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Internal/ReflectionUtils.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Internal/ReflectionUtils.cs @@ -15,7 +15,7 @@ namespace System.Reactive { public static TDelegate CreateDelegate(object o, MethodInfo method) { -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) return (TDelegate)(object)method.CreateDelegate(typeof(TDelegate), o); #else return (TDelegate)(object)Delegate.CreateDelegate(typeof(TDelegate), o, method); @@ -24,7 +24,7 @@ namespace System.Reactive public static Delegate CreateDelegate(Type delegateType, object o, MethodInfo method) { -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) return method.CreateDelegate(delegateType, o); #else return Delegate.CreateDelegate(delegateType, o, method); @@ -101,7 +101,7 @@ namespace System.Reactive public static EventInfo GetEventEx(this Type type, string name, bool isStatic) { -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) // TODO: replace in the future by System.Reflection.RuntimeExtensions extension methods var q = new Queue(); q.Enqueue(type.GetTypeInfo()); @@ -127,7 +127,7 @@ namespace System.Reactive #endif } -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) public static MethodInfo GetMethod(this Type type, string name) { return type.GetTypeInfo().GetDeclaredMethod(name); diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/IQueryLanguage.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/IQueryLanguage.cs index 4b35af6..2abdae0 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/IQueryLanguage.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/IQueryLanguage.cs @@ -1,6 +1,5 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. -using System; using System.Collections.Generic; using System.Linq; using System.Reactive.Concurrency; @@ -9,7 +8,7 @@ using System.Reactive.Subjects; using System.Threading; #if !NO_REMOTING -using System.Runtime.Remoting.Lifetime; + #endif #if !NO_TPL @@ -386,7 +385,7 @@ namespace System.Reactive.Linq #endregion #region * Conversions * - + IDisposable Subscribe(IEnumerable source, IObserver observer); IDisposable Subscribe(IEnumerable source, IObserver observer, IScheduler scheduler); IEnumerable ToEnumerable(IObservable source); @@ -503,7 +502,7 @@ namespace System.Reactive.Linq IObservable FromEvent(Action> addHandler, Action> removeHandler, IScheduler scheduler); IObservable FromEvent(Action addHandler, Action removeHandler); IObservable FromEvent(Action addHandler, Action removeHandler, IScheduler scheduler); - + #endregion #region * Imperative * @@ -683,10 +682,18 @@ namespace System.Reactive.Linq IObservable> GroupBy(IObservable source, Func keySelector, IEqualityComparer comparer); IObservable> GroupBy(IObservable source, Func keySelector); IObservable> GroupBy(IObservable source, Func keySelector, Func elementSelector, IEqualityComparer comparer); + IObservable> GroupBy(IObservable source, Func keySelector, Func elementSelector, int capacity); + IObservable> GroupBy(IObservable source, Func keySelector, int capacity, IEqualityComparer comparer); + IObservable> GroupBy(IObservable source, Func keySelector, int capacity); + IObservable> GroupBy(IObservable source, Func keySelector, Func elementSelector, int capacity, IEqualityComparer comparer); IObservable> GroupByUntil(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, IEqualityComparer comparer); IObservable> GroupByUntil(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector); - IObservable> GroupByUntil(IObservable source, Func keySelector,Func, IObservable> durationSelector, IEqualityComparer comparer); + IObservable> GroupByUntil(IObservable source, Func keySelector, Func, IObservable> durationSelector, IEqualityComparer comparer); IObservable> GroupByUntil(IObservable source, Func keySelector, Func, IObservable> durationSelector); + IObservable> GroupByUntil(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, int capacity, IEqualityComparer comparer); + IObservable> GroupByUntil(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, int capacity); + IObservable> GroupByUntil(IObservable source, Func keySelector, Func, IObservable> durationSelector, int capacity, IEqualityComparer comparer); + IObservable> GroupByUntil(IObservable source, Func keySelector, Func, IObservable> durationSelector, int capacity); IObservable GroupJoin(IObservable left, IObservable right, Func> leftDurationSelector, Func> rightDurationSelector, Func, TResult> resultSelector); IObservable Join(IObservable left, IObservable right, Func> leftDurationSelector, Func> rightDurationSelector, Func resultSelector); IObservable OfType(IObservable source); @@ -698,7 +705,7 @@ namespace System.Reactive.Linq IObservable SelectMany(IObservable source, Func> collectionSelector, Func resultSelector); IObservable SelectMany(IObservable source, Func> collectionSelector, Func resultSelector); IObservable SelectMany(IObservable source, Func> onNext, Func> onError, Func> onCompleted); - IObservable SelectMany(IObservable source, Func> onNext, Func> onError, Func> onCompleted); + IObservable SelectMany(IObservable source, Func> onNext, Func> onError, Func> onCompleted); IObservable SelectMany(IObservable source, Func> selector); IObservable SelectMany(IObservable source, Func> selector); IObservable SelectMany(IObservable source, Func> collectionSelector, Func resultSelector); @@ -715,9 +722,13 @@ namespace System.Reactive.Linq #if !NO_TPL IObservable SelectMany(IObservable source, Func> selector); + IObservable SelectMany(IObservable source, Func> selector); IObservable SelectMany(IObservable source, Func> selector); + IObservable SelectMany(IObservable source, Func> selector); IObservable SelectMany(IObservable source, Func> taskSelector, Func resultSelector); + IObservable SelectMany(IObservable source, Func> taskSelector, Func resultSelector); IObservable SelectMany(IObservable source, Func> taskSelector, Func resultSelector); + IObservable SelectMany(IObservable source, Func> taskSelector, Func resultSelector); #endif #endregion diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Blocking.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Blocking.cs index 1575b3d..db2a1d1 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Blocking.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Blocking.cs @@ -76,7 +76,7 @@ namespace System.Reactive.Linq #endregion - #region First + #region + First + /// /// Returns the first element of an observable sequence. @@ -123,7 +123,7 @@ namespace System.Reactive.Linq #endregion - #region FirstOrDefault + #region + FirstOrDefault + /// /// Returns the first element of an observable sequence, or a default value if no such element exists. @@ -233,7 +233,7 @@ namespace System.Reactive.Linq #endregion - #region Last + #region + Last + /// /// Returns the last element of an observable sequence. @@ -280,7 +280,7 @@ namespace System.Reactive.Linq #endregion - #region LastOrDefault + #region + LastOrDefault + /// /// Returns the last element of an observable sequence, or a default value if no such element exists. @@ -385,7 +385,7 @@ namespace System.Reactive.Linq #endregion - #region Single + #region + Single + /// /// Returns the only element of an observable sequence, and throws an exception if there is not exactly one element in the observable sequence. @@ -432,7 +432,7 @@ namespace System.Reactive.Linq #endregion - #region SingleOrDefault + #region + SingleOrDefault + /// /// Returns the only element of an observable sequence, or a default value if the observable sequence is empty; this method throws an exception if there is more than one element in the observable sequence. @@ -479,7 +479,7 @@ namespace System.Reactive.Linq #endregion - #region Wait + #region + Wait + /// /// Waits for the observable sequence to complete and returns the last element of the sequence. diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Concurrency.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Concurrency.cs index e14df19..7f29bfd 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Concurrency.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Concurrency.cs @@ -5,7 +5,7 @@ using System.Threading; namespace System.Reactive.Linq { - public static partial class Observable + public static partial class Observable { #region + ObserveOn + diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Creation.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Creation.cs index 3de4a43..9b39888 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Creation.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Creation.cs @@ -12,7 +12,7 @@ namespace System.Reactive.Linq { public static partial class Observable { - #region - Create - + #region + Create + /// /// Creates an observable sequence from a specified Subscribe method implementation. @@ -56,7 +56,7 @@ namespace System.Reactive.Linq #endregion - #region - CreateAsync - + #region + CreateAsync + #if !NO_TPL /// @@ -591,7 +591,7 @@ namespace System.Reactive.Linq #endregion - #region - UsingAsync - + #region + UsingAsync + #if !NO_TPL diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Imperative.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Imperative.cs index 0c8089e..2124e62 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Imperative.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Imperative.cs @@ -12,7 +12,7 @@ namespace System.Reactive.Linq { public static partial class Observable { - #region ForEachAsync + #region + ForEachAsync + #if !NO_TPL /// diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Multiple.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Multiple.cs index 9cb62de..db0d61b 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Multiple.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Multiple.cs @@ -67,7 +67,7 @@ namespace System.Reactive.Linq #endregion - #region Buffer + #region + Buffer + /// /// Projects each element of an observable sequence into consecutive non-overlapping buffers. @@ -1403,8 +1403,10 @@ namespace System.Reactive.Linq #region + Switch + /// - /// Switches between the inner observable sequences such that the resulting sequence always produces elements from the most recently received inner observable sequence. - /// Each time a new inner observable sequence is received, the previous inner observable sequence is unsubscribed from. + /// Transforms an observable sequence of observable sequences into an observable sequence + /// producing values only from the most recent observable sequence. + /// Each time a new inner observable sequence is received, unsubscribe from the + /// previous inner observable sequence. /// /// The type of the elements in the source sequences. /// Observable sequence of inner observable sequences. @@ -1421,7 +1423,8 @@ namespace System.Reactive.Linq #if !NO_TPL /// - /// Switches between the tasks such that the resulting sequence always produces results from the most recently received task. + /// Transforms an observable sequence of tasks into an observable sequence + /// producing values only from the most recent observable sequence. /// Each time a new task is received, the previous task's result is ignored. /// /// The type of the results produced by the source tasks. @@ -1464,7 +1467,7 @@ namespace System.Reactive.Linq #endregion - #region Window + #region + Window + /// /// Projects each element of an observable sequence into consecutive non-overlapping windows. diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Single.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Single.cs index 5d8e3ef..8782702 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Single.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.Single.cs @@ -339,7 +339,7 @@ namespace System.Reactive.Linq #endregion - #region - Repeat - + #region + Repeat + /// /// Repeats the observable sequence indefinitely. @@ -377,7 +377,7 @@ namespace System.Reactive.Linq #endregion - #region - Retry - + #region + Retry + /// /// Repeats the source observable sequence until it successfully terminates. @@ -486,7 +486,7 @@ namespace System.Reactive.Linq #endregion - #region - StartWith - + #region + StartWith + /// /// Prepends a sequence of values to an observable sequence. diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.StandardSequenceOperators.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.StandardSequenceOperators.cs index 8eb9289..803ba26 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.StandardSequenceOperators.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable.StandardSequenceOperators.cs @@ -241,6 +241,112 @@ namespace System.Reactive.Linq return s_impl.GroupBy(source, keySelector, elementSelector, comparer); } + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// The initial number of elements that the underlying dictionary can contain. + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// or is null. + /// is less than 0. + public static IObservable> GroupBy(this IObservable source, Func keySelector, int capacity) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (capacity < 0) + throw new ArgumentOutOfRangeException("capacity"); + + return s_impl.GroupBy(source, keySelector, capacity); + } + + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and comparer. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// The initial number of elements that the underlying dictionary can contain. + /// An equality comparer to compare keys with. + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// or or is null. + /// is less than 0. + public static IObservable> GroupBy(this IObservable source, Func keySelector, int capacity, IEqualityComparer comparer) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (capacity < 0) + throw new ArgumentOutOfRangeException("capacity"); + if (comparer == null) + throw new ArgumentNullException("comparer"); + + return s_impl.GroupBy(source, keySelector, capacity, comparer); + } + + /// + /// Groups the elements of an observable sequence with the specified initial capacity and selects the resulting elements by using a specified function. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements within the groups computed for each element in the source sequence. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to map each source element to an element in an observable group. + /// The initial number of elements that the underlying dictionary can contain. + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// or or is null. + /// is less than 0. + public static IObservable> GroupBy(this IObservable source, Func keySelector, Func elementSelector, int capacity) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (elementSelector == null) + throw new ArgumentNullException("elementSelector"); + if (capacity < 0) + throw new ArgumentOutOfRangeException("capacity"); + + return s_impl.GroupBy(source, keySelector, elementSelector, capacity); + } + + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and comparer and selects the resulting elements by using a specified function. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements within the groups computed for each element in the source sequence. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to map each source element to an element in an observable group. + /// The initial number of elements that the underlying dictionary can contain. + /// An equality comparer to compare keys with. + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// or or or is null. + /// is less than 0. + public static IObservable> GroupBy(this IObservable source, Func keySelector, Func elementSelector, int capacity, IEqualityComparer comparer) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (elementSelector == null) + throw new ArgumentNullException("elementSelector"); + if (capacity < 0) + throw new ArgumentOutOfRangeException("capacity"); + if (comparer == null) + throw new ArgumentNullException("comparer"); + + return s_impl.GroupBy(source, keySelector, elementSelector, capacity, comparer); + } + #endregion #region + GroupByUntil + @@ -329,7 +435,7 @@ namespace System.Reactive.Linq /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. /// /// or or or is null. - public static IObservable> GroupByUntil(this IObservable source, Func keySelector,Func, IObservable> durationSelector, IEqualityComparer comparer) + public static IObservable> GroupByUntil(this IObservable source, Func keySelector, Func, IObservable> durationSelector, IEqualityComparer comparer) { if (source == null) throw new ArgumentNullException("source"); @@ -371,6 +477,148 @@ namespace System.Reactive.Linq return s_impl.GroupByUntil(source, keySelector, durationSelector); } + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and comparer and selects the resulting elements by using a specified function. + /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements within the groups computed for each element in the source sequence. + /// The type of the elements in the duration sequences obtained for each group to denote its lifetime. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to map each source element to an element in an observable group. + /// A function to signal the expiration of a group. + /// The initial number of elements that the underlying dictionary can contain. + /// An equality comparer to compare keys with. + /// + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encountered. + /// + /// or or or or is null. + /// is less than 0. + public static IObservable> GroupByUntil(this IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, int capacity, IEqualityComparer comparer) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (elementSelector == null) + throw new ArgumentNullException("elementSelector"); + if (durationSelector == null) + throw new ArgumentNullException("durationSelector"); + if (capacity < 0) + throw new ArgumentOutOfRangeException("capacity"); + if (comparer == null) + throw new ArgumentNullException("comparer"); + + return s_impl.GroupByUntil(source, keySelector, elementSelector, durationSelector, capacity, comparer); + } + + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and selects the resulting elements by using a specified function. + /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements within the groups computed for each element in the source sequence. + /// The type of the elements in the duration sequences obtained for each group to denote its lifetime. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to map each source element to an element in an observable group. + /// A function to signal the expiration of a group. + /// The initial number of elements that the underlying dictionary can contain. + /// + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + /// + /// or or or is null. + /// is less than 0. + public static IObservable> GroupByUntil(this IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, int capacity) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (elementSelector == null) + throw new ArgumentNullException("elementSelector"); + if (durationSelector == null) + throw new ArgumentNullException("durationSelector"); + if (capacity < 0) + throw new ArgumentOutOfRangeException("capacity"); + + return s_impl.GroupByUntil(source, keySelector, elementSelector, durationSelector, capacity); + } + + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and comparer. + /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements in the duration sequences obtained for each group to denote its lifetime. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to signal the expiration of a group. + /// The initial number of elements that the underlying dictionary can contain. + /// An equality comparer to compare keys with. + /// + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + /// + /// or or or is null. + /// is less than 0. + public static IObservable> GroupByUntil(this IObservable source, Func keySelector, Func, IObservable> durationSelector, int capacity, IEqualityComparer comparer) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (durationSelector == null) + throw new ArgumentNullException("durationSelector"); + if (capacity < 0) + throw new ArgumentOutOfRangeException("capacity"); + if (comparer == null) + throw new ArgumentNullException("comparer"); + + return s_impl.GroupByUntil(source, keySelector, durationSelector, capacity, comparer); + } + + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function. + /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements in the duration sequences obtained for each group to denote its lifetime. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to signal the expiration of a group. + /// The initial number of elements that the underlying dictionary can contain. + /// + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + /// + /// or or is null. + /// is less than 0. + public static IObservable> GroupByUntil(this IObservable source, Func keySelector, Func, IObservable> durationSelector, int capacity) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (durationSelector == null) + throw new ArgumentNullException("durationSelector"); + if (capacity < 0) + throw new ArgumentOutOfRangeException("capacity"); + + return s_impl.GroupByUntil(source, keySelector, durationSelector, capacity); + } + #endregion #region + GroupJoin + @@ -545,12 +793,12 @@ namespace System.Reactive.Linq } /// - /// Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. + /// Projects each element of an observable sequence to an observable sequence by incorporating the element's index and merges the resulting observable sequences into one observable sequence. /// /// The type of the elements in the source sequence. /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. /// An observable sequence of elements to project. - /// A transform function to apply to each source element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. /// or is null. public static IObservable SelectMany(this IObservable source, Func> selector) @@ -584,6 +832,26 @@ namespace System.Reactive.Linq return s_impl.SelectMany(source, selector); } + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index and merges all of the task results into one observable sequence. + /// + /// The type of the elements in the source sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + /// or is null. + public static IObservable SelectMany(this IObservable source, Func> selector) + { + if (source == null) + throw new ArgumentNullException("source"); + if (selector == null) + throw new ArgumentNullException("selector"); + + return s_impl.SelectMany(source, selector); + } + /// /// Projects each element of an observable sequence to a task with cancellation support and merges all of the task results into one observable sequence. /// @@ -603,6 +871,26 @@ namespace System.Reactive.Linq return s_impl.SelectMany(source, selector); } + + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index with cancellation support and merges all of the task results into one observable sequence. + /// + /// The type of the elements in the source sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + /// or is null. + public static IObservable SelectMany(this IObservable source, Func> selector) + { + if (source == null) + throw new ArgumentNullException("source"); + if (selector == null) + throw new ArgumentNullException("selector"); + + return s_impl.SelectMany(source, selector); + } #endif /// @@ -629,14 +917,14 @@ namespace System.Reactive.Linq } /// - /// Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Projects each element of an observable sequence to an observable sequence by incorporating the element's index, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. /// /// The type of the elements in the source sequence. /// The type of the elements in the projected intermediate sequences. /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. /// An observable sequence of elements to project. - /// A transform function to apply to each source element; the second parameter of the function represents the index of the source element. - /// A transform function to apply to each element of the intermediate sequence. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element and the fourth parameter represents the index of the intermediate element. /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. /// or or is null. public static IObservable SelectMany(this IObservable source, Func> collectionSelector, Func resultSelector) @@ -676,6 +964,30 @@ namespace System.Reactive.Linq return s_impl.SelectMany(source, taskSelector, resultSelector); } + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IObservable SelectMany(this IObservable source, Func> taskSelector, Func resultSelector) + { + if (source == null) + throw new ArgumentNullException("source"); + if (taskSelector == null) + throw new ArgumentNullException("taskSelector"); + if (resultSelector == null) + throw new ArgumentNullException("resultSelector"); + + return s_impl.SelectMany(source, taskSelector, resultSelector); + } + /// /// Projects each element of an observable sequence to a task with cancellation support, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. /// @@ -699,6 +1011,30 @@ namespace System.Reactive.Linq return s_impl.SelectMany(source, taskSelector, resultSelector); } + + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index with cancellation support, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IObservable SelectMany(this IObservable source, Func> taskSelector, Func resultSelector) + { + if (source == null) + throw new ArgumentNullException("source"); + if (taskSelector == null) + throw new ArgumentNullException("taskSelector"); + if (resultSelector == null) + throw new ArgumentNullException("resultSelector"); + + return s_impl.SelectMany(source, taskSelector, resultSelector); + } #endif /// @@ -727,17 +1063,17 @@ namespace System.Reactive.Linq } /// - /// Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. + /// Projects each notification of an observable sequence to an observable sequence by incorporating the element's index and merges the resulting observable sequences into one observable sequence. /// /// The type of the elements in the source sequence. /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. /// An observable sequence of notifications to project. - /// A transform function to apply to each element; the second parameter represents the index of the source element. - /// A transform function to apply when an error occurs in the source sequence; the second parameter represents the index of the source element. - /// A transform function to apply when the end of the source sequence is reached; the second parameter represents the number of elements observed. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply when an error occurs in the source sequence. + /// A transform function to apply when the end of the source sequence is reached. /// An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. /// or or or is null. - public static IObservable SelectMany(this IObservable source, Func> onNext, Func> onError, Func> onCompleted) + public static IObservable SelectMany(this IObservable source, Func> onNext, Func> onError, Func> onCompleted) { if (source == null) throw new ArgumentNullException("source"); @@ -772,13 +1108,12 @@ namespace System.Reactive.Linq } /// - /// Projects each element of an observable sequence to an enumerable sequence and concatenates the resulting enumerable sequences into one observable sequence. - /// The index of each source element is used in the projected form of that element. + /// Projects each element of an observable sequence to an enumerable sequence by incorporating the element's index and concatenates the resulting enumerable sequences into one observable sequence. /// /// The type of the elements in the source sequence. /// The type of the elements in the projected inner enumerable sequences and the elements in the merged result sequence. /// An observable sequence of elements to project. - /// A transform function to apply to each source element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. /// or is null. /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. @@ -817,14 +1152,14 @@ namespace System.Reactive.Linq } /// - /// Projects each element of an observable sequence to an enumerable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Projects each element of an observable sequence to an enumerable sequence by incorporating the element's index, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. /// /// The type of the elements in the source sequence. /// The type of the elements in the projected intermediate enumerable sequences. /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. /// An observable sequence of elements to project. /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. - /// A transform function to apply to each element of the intermediate sequence. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element and the fourth parameter represents the index of the intermediate element. /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. /// or or is null. /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/AddRef.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/AddRef.cs index 3fc6962..46e66c6 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/AddRef.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/AddRef.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class AddRef : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Aggregate.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Aggregate.cs index d1b6ef8..6ae63c0 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Aggregate.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Aggregate.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Aggregate : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/All.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/All.cs index 09c825d..49a0933 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/All.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/All.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class All : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Amb.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Amb.cs index 7272cee..ea110c5 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Amb.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Amb.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Amb : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Any.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Any.cs index 1414bdd..c8eb37a 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Any.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Any.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Any : Producer { @@ -25,7 +25,7 @@ namespace System.Reactive.Linq.Observαble { if (_predicate != null) { - var sink = new π(this, observer, cancel); + var sink = new AnyImpl(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -65,11 +65,11 @@ namespace System.Reactive.Linq.Observαble } } - class π : Sink, IObserver + class AnyImpl : Sink, IObserver { private readonly Any _parent; - public π(Any parent, IObserver observer, IDisposable cancel) + public AnyImpl(Any parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/AsObservable.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/AsObservable.cs index 09d5f14..c4e9d2f 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/AsObservable.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/AsObservable.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class AsObservable : Producer, IEvaluatableObservable { @@ -14,7 +14,7 @@ namespace System.Reactive.Linq.Observαble _source = source; } - public IObservable Ω() + public IObservable Omega() { return this; } diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Average.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Average.cs index fb2d6b7..897da02 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Average.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Average.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class AverageDouble : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Buffer.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Buffer.cs index a82b550..ce6ced8 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Buffer.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Buffer.cs @@ -8,7 +8,7 @@ using System.Reactive.Concurrency; using System.Reactive.Disposables; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Buffer : Producer> { @@ -53,7 +53,7 @@ namespace System.Reactive.Linq.Observαble } else if (_count > 0) { - var sink = new μ(this, observer, cancel); + var sink = new Impl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -61,13 +61,13 @@ namespace System.Reactive.Linq.Observαble { if (_timeSpan == _timeShift) { - var sink = new π(this, observer, cancel); + var sink = new BufferTimeShift(this, observer, cancel); setSink(sink); return sink.Run(); } else { - var sink = new τ(this, observer, cancel); + var sink = new BufferImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -143,11 +143,11 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink>, IObserver + class BufferImpl : Sink>, IObserver { private readonly Buffer _parent; - public τ(Buffer parent, IObserver> observer, IDisposable cancel) + public BufferImpl(Buffer parent, IObserver> observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -283,11 +283,11 @@ namespace System.Reactive.Linq.Observαble } } - class π : Sink>, IObserver + class BufferTimeShift : Sink>, IObserver { private readonly Buffer _parent; - public π(Buffer parent, IObserver> observer, IDisposable cancel) + public BufferTimeShift(Buffer parent, IObserver> observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -346,11 +346,11 @@ namespace System.Reactive.Linq.Observαble } } - class μ : Sink>, IObserver + class Impl : Sink>, IObserver { private readonly Buffer _parent; - public μ(Buffer parent, IObserver> observer, IDisposable cancel) + public Impl(Buffer parent, IObserver> observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -487,7 +487,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new β(this, observer, cancel); + var sink = new Beta(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -544,7 +544,7 @@ namespace System.Reactive.Linq.Observαble var closingSubscription = new SingleAssignmentDisposable(); _m.Disposable = closingSubscription; - closingSubscription.Disposable = bufferClose.SubscribeSafe(new ω(this, closingSubscription)); + closingSubscription.Disposable = bufferClose.SubscribeSafe(new Omega(this, closingSubscription)); } private void CloseBuffer(IDisposable closingSubscription) @@ -561,12 +561,12 @@ namespace System.Reactive.Linq.Observαble _bufferGate.Wait(CreateBufferClose); } - class ω : IObserver + class Omega : IObserver { private readonly _ _parent; private readonly IDisposable _self; - public ω(_ parent, IDisposable self) + public Omega(_ parent, IDisposable self) { _parent = parent; _self = self; @@ -617,11 +617,11 @@ namespace System.Reactive.Linq.Observαble } } - class β : Sink>, IObserver + class Beta : Sink>, IObserver { private readonly Buffer _parent; - public β(Buffer parent, IObserver> observer, IDisposable cancel) + public Beta(Buffer parent, IObserver> observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -641,16 +641,16 @@ namespace System.Reactive.Linq.Observαble _refCountDisposable = new RefCountDisposable(d); d.Add(_parent._source.SubscribeSafe(this)); - d.Add(_parent._bufferBoundaries.SubscribeSafe(new ω(this))); + d.Add(_parent._bufferBoundaries.SubscribeSafe(new Omega(this))); return _refCountDisposable; } - class ω : IObserver + class Omega : IObserver { - private readonly β _parent; + private readonly Beta _parent; - public ω(β parent) + public Omega(Beta parent) { _parent = parent; } diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Case.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Case.cs index b104050..b3ba37c 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Case.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Case.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Case : Producer, IEvaluatableObservable { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Cast.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Cast.cs index 48820b3..b123357 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Cast.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Cast.cs @@ -3,9 +3,9 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { - class Cast : Producer /* Could optimize further by deriving from Select and providing Ω. We're not doing this (yet) for debuggability. */ + class Cast : Producer /* Could optimize further by deriving from Select and providing Omega. We're not doing this (yet) for debuggability. */ { private readonly IObservable _source; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Catch.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Catch.cs index 71e0037..06bf911 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Catch.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Catch.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Catch : Producer { @@ -136,7 +136,7 @@ namespace System.Reactive.Linq.Observαble var d = new SingleAssignmentDisposable(); _subscription.Disposable = d; - d.Disposable = result.SubscribeSafe(new ε(this)); + d.Disposable = result.SubscribeSafe(new Impl(this)); } else { @@ -151,11 +151,11 @@ namespace System.Reactive.Linq.Observαble base.Dispose(); } - class ε : IObserver + class Impl : IObserver { private readonly _ _parent; - public ε(_ parent) + public Impl(_ parent) { _parent = parent; } diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Collect.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Collect.cs index 2cfd240..8f0bf24 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Collect.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Collect.cs @@ -7,7 +7,7 @@ using System.Reactive; using System.Reactive.Threading; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Collect : PushToPullAdapter { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/CombineLatest.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/CombineLatest.cs index 2188307..9748e24 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/CombineLatest.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/CombineLatest.cs @@ -7,7 +7,7 @@ using System.Collections.ObjectModel; using System.Linq; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { #region Binary diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Concat.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Concat.cs index 5a9b2e4..cd8c78a 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Concat.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Concat.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Concat : Producer, IConcatenatable { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Contains.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Contains.cs index b26e2d4..69e30dc 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Contains.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Contains.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Contains : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Count.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Count.cs index 7432816..0c2f389 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Count.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Count.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Count : Producer { @@ -31,7 +31,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new π(this, observer, cancel); + var sink = new CountImpl(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -77,12 +77,12 @@ namespace System.Reactive.Linq.Observαble } } - class π : Sink, IObserver + class CountImpl : Sink, IObserver { private readonly Count _parent; private int _count; - public π(Count parent, IObserver observer, IDisposable cancel) + public CountImpl(Count parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DefaultIfEmpty.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DefaultIfEmpty.cs index ed4bb89..551e536 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DefaultIfEmpty.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DefaultIfEmpty.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class DefaultIfEmpty : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Defer.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Defer.cs index ba3dcc4..aa49c12 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Defer.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Defer.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Defer : Producer, IEvaluatableObservable { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Delay.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Delay.cs index 3e2cbba..5ea3d25 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Delay.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Delay.cs @@ -10,7 +10,7 @@ using System.Threading; using System.Reactive.Threading; #endif -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Delay : Producer { @@ -37,7 +37,7 @@ namespace System.Reactive.Linq.Observαble { if (_scheduler.AsLongRunning() != null) { - var sink = new λ(this, observer, cancel); + var sink = new LongRunningImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -227,9 +227,9 @@ namespace System.Reactive.Linq.Observαble // implementation, the loop below kept running while there was work for immediate dispatch, // potentially causing a long running work item on the target scheduler. With the addition // of long-running scheduling in Rx v2.0, we can check whether the scheduler supports this - // interface and perform different processing (see λ). To reduce the code churn in the old - // loop code here, we set the shouldYield flag to true after the first dispatch iteration, - // in order to break from the loop and enter the recursive scheduling path. + // interface and perform different processing (see LongRunningImpl). To reduce the code + // churn in the old loop code here, we set the shouldYield flag to true after the first + // dispatch iteration, in order to break from the loop and enter the recursive scheduling path. // var shouldYield = false; @@ -322,11 +322,11 @@ namespace System.Reactive.Linq.Observαble } } - class λ : Sink, IObserver + class LongRunningImpl : Sink, IObserver { private readonly Delay _parent; - public λ(Delay parent, IObserver observer, IDisposable cancel) + public LongRunningImpl(Delay parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -629,7 +629,7 @@ namespace System.Reactive.Linq.Observαble } else { - _subscription.Disposable = _parent._subscriptionDelay.SubscribeSafe(new σ(this)); + _subscription.Disposable = _parent._subscriptionDelay.SubscribeSafe(new SubscriptionDelay(this)); } return new CompositeDisposable(_subscription, _delays); @@ -660,7 +660,7 @@ namespace System.Reactive.Linq.Observαble var d = new SingleAssignmentDisposable(); _delays.Add(d); - d.Disposable = delay.SubscribeSafe(new δ(this, value, d)); + d.Disposable = delay.SubscribeSafe(new Delta(this, value, d)); } public void OnError(Exception error) @@ -692,11 +692,11 @@ namespace System.Reactive.Linq.Observαble } } - class σ : IObserver + class SubscriptionDelay : IObserver { private readonly _ _parent; - public σ(_ parent) + public SubscriptionDelay(_ parent) { _parent = parent; } @@ -718,13 +718,13 @@ namespace System.Reactive.Linq.Observαble } } - class δ : IObserver + class Delta : IObserver { private readonly _ _parent; private readonly TSource _value; private readonly IDisposable _self; - public δ(_ parent, TSource value, IDisposable self) + public Delta(_ parent, TSource value, IDisposable self) { _parent = parent; _value = value; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DelaySubscription.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DelaySubscription.cs index c6a05cc..f5a742a 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DelaySubscription.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DelaySubscription.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Concurrency; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class DelaySubscription : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Dematerialize.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Dematerialize.cs index 112b156..590ef3b 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Dematerialize.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Dematerialize.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Dematerialize : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Distinct.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Distinct.cs index af20277..bd4b0ca 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Distinct.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Distinct.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Distinct : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DistinctUntilChanged.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DistinctUntilChanged.cs index 10c7923..1ba8f5f 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DistinctUntilChanged.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DistinctUntilChanged.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class DistinctUntilChanged : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Do.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Do.cs index 2f73cfa..a4b3747 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Do.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Do.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Do : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DoWhile.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DoWhile.cs index 3ef40eb..5dc0bc6 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DoWhile.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/DoWhile.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class DoWhile : Producer, IConcatenatable { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ElementAt.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ElementAt.cs index b2b1212..0798d3b 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ElementAt.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ElementAt.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class ElementAt : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Empty.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Empty.cs index 42c7241..30a2b65 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Empty.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Empty.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Concurrency; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Empty : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Finally.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Finally.cs index ca9a5d8..a70ac94 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Finally.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Finally.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Finally : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FirstAsync.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FirstAsync.cs index 8d8bba7..62da120 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FirstAsync.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FirstAsync.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class FirstAsync : Producer { @@ -22,7 +22,7 @@ namespace System.Reactive.Linq.Observαble { if (_predicate != null) { - var sink = new π(this, observer, cancel); + var sink = new FirstAsyncImpl(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -73,11 +73,11 @@ namespace System.Reactive.Linq.Observαble } } - class π : Sink, IObserver + class FirstAsyncImpl : Sink, IObserver { private readonly FirstAsync _parent; - public π(FirstAsync parent, IObserver observer, IDisposable cancel) + public FirstAsyncImpl(FirstAsync parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/For.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/For.cs index 85b9e03..948f319 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/For.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/For.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class For : Producer, IConcatenatable { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ForEach.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ForEach.cs index 38e112d..9b5c024 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ForEach.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ForEach.cs @@ -4,7 +4,7 @@ using System; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class ForEach { @@ -62,7 +62,7 @@ namespace System.Reactive.Linq.Observαble } } - public class τ : IObserver + public class ForEachImpl : IObserver { private readonly Action _onNext; private readonly Action _done; @@ -71,7 +71,7 @@ namespace System.Reactive.Linq.Observαble private Exception _exception; private int _stopped; - public τ(Action onNext, Action done) + public ForEachImpl(Action onNext, Action done) { _onNext = onNext; _done = done; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FromEvent.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FromEvent.cs index 82c4348..90aa779 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FromEvent.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FromEvent.cs @@ -156,7 +156,7 @@ using System.Reactive.Subjects; // subject (which is opaque to the event producer). Not to mention that the subject would always be // rooted by the target event (even when the FromEvent[Pattern] observable wrapper is unreachable). // -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class FromEvent : ClassicEventProducer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FromEventPattern.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FromEventPattern.cs index 76da050..ca98290 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FromEventPattern.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/FromEventPattern.cs @@ -12,23 +12,23 @@ using System.Threading; // // See FromEvent.cs for more information. // -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class FromEventPattern { - public class τ : ClassicEventProducer> + public class Impl : ClassicEventProducer> #if !NO_EVENTARGS_CONSTRAINT where TEventArgs : EventArgs #endif { private readonly Func, TDelegate> _conversion; - public τ(Action addHandler, Action removeHandler, IScheduler scheduler) + public Impl(Action addHandler, Action removeHandler, IScheduler scheduler) : base(addHandler, removeHandler, scheduler) { } - public τ(Func, TDelegate> conversion, Action addHandler, Action removeHandler, IScheduler scheduler) + public Impl(Func, TDelegate> conversion, Action addHandler, Action removeHandler, IScheduler scheduler) : base(addHandler, removeHandler, scheduler) { _conversion = conversion; @@ -52,12 +52,12 @@ namespace System.Reactive.Linq.Observαble } } - public class τ : ClassicEventProducer> + public class Impl : ClassicEventProducer> #if !NO_EVENTARGS_CONSTRAINT where TEventArgs : EventArgs #endif { - public τ(Action addHandler, Action removeHandler, IScheduler scheduler) + public Impl(Action addHandler, Action removeHandler, IScheduler scheduler) : base(addHandler, removeHandler, scheduler) { } @@ -69,7 +69,7 @@ namespace System.Reactive.Linq.Observαble } } - public class ρ : EventProducer + public class Handler : EventProducer { private readonly object _target; private readonly Type _delegateType; @@ -80,7 +80,7 @@ namespace System.Reactive.Linq.Observαble private readonly bool _isWinRT; #endif - public ρ(object target, Type delegateType, MethodInfo addMethod, MethodInfo removeMethod, Func getResult, bool isWinRT, IScheduler scheduler) + public Handler(object target, Type delegateType, MethodInfo addMethod, MethodInfo removeMethod, Func getResult, bool isWinRT, IScheduler scheduler) : base(scheduler) { #if HAS_WINRT diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Generate.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Generate.cs index 89ef862..7e46655 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Generate.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Generate.cs @@ -7,7 +7,7 @@ using System.Reactive.Concurrency; using System.Reactive.Disposables; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Generate : Producer { @@ -52,13 +52,13 @@ namespace System.Reactive.Linq.Observαble { if (_timeSelectorA != null) { - var sink = new α(this, observer, cancel); + var sink = new SelectorA(this, observer, cancel); setSink(sink); return sink.Run(); } else if (_timeSelectorR != null) { - var sink = new δ(this, observer, cancel); + var sink = new Delta(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -70,11 +70,11 @@ namespace System.Reactive.Linq.Observαble } } - class α : Sink + class SelectorA : Sink { private readonly Generate _parent; - public α(Generate parent, IObserver observer, IDisposable cancel) + public SelectorA(Generate parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -130,11 +130,11 @@ namespace System.Reactive.Linq.Observαble } } - class δ : Sink + class Delta : Sink { private readonly Generate _parent; - public δ(Generate parent, IObserver observer, IDisposable cancel) + public Delta(Generate parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GetEnumerator.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GetEnumerator.cs index 05bf20b..a25efa8 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GetEnumerator.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GetEnumerator.cs @@ -8,7 +8,7 @@ using System.Diagnostics; using System.Reactive.Disposables; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class GetEnumerator : IEnumerator, IObserver { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupBy.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupBy.cs index 1e64100..4f91030 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupBy.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupBy.cs @@ -7,20 +7,22 @@ using System.Linq; using System.Reactive.Disposables; using System.Reactive.Subjects; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class GroupBy : Producer> { private readonly IObservable _source; private readonly Func _keySelector; private readonly Func _elementSelector; + private readonly int? _capacity; private readonly IEqualityComparer _comparer; - public GroupBy(IObservable source, Func keySelector, Func elementSelector, IEqualityComparer comparer) + public GroupBy(IObservable source, Func keySelector, Func elementSelector, int? capacity, IEqualityComparer comparer) { _source = source; _keySelector = keySelector; _elementSelector = elementSelector; + _capacity = capacity; _comparer = comparer; } @@ -49,7 +51,15 @@ namespace System.Reactive.Linq.Observαble : base(observer, cancel) { _parent = parent; - _map = new Dictionary>(_parent._comparer); + + if (_parent._capacity.HasValue) + { + _map = new Dictionary>(_parent._capacity.Value, _parent._comparer); + } + else + { + _map = new Dictionary>(_parent._comparer); + } } public void OnNext(TSource value) diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupByUntil.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupByUntil.cs index 7d91f73..9baf146 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupByUntil.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupByUntil.cs @@ -1,13 +1,13 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. - #if !NO_PERF +#if !NO_PERF using System; using System.Collections.Generic; using System.Linq; using System.Reactive.Disposables; using System.Reactive.Subjects; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class GroupByUntil : Producer> { @@ -15,14 +15,16 @@ namespace System.Reactive.Linq.Observαble private readonly Func _keySelector; private readonly Func _elementSelector; private readonly Func, IObservable> _durationSelector; + private readonly int? _capacity; private readonly IEqualityComparer _comparer; - public GroupByUntil(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, IEqualityComparer comparer) + public GroupByUntil(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, int? capacity, IEqualityComparer comparer) { _source = source; _keySelector = keySelector; _elementSelector = elementSelector; _durationSelector = durationSelector; + _capacity = capacity; _comparer = comparer; } @@ -52,7 +54,7 @@ namespace System.Reactive.Linq.Observαble : base(observer, cancel) { _parent = parent; - _map = new Map>(_parent._comparer); + _map = new Map>(_parent._capacity, _parent._comparer); _nullGate = new object(); } @@ -127,7 +129,7 @@ namespace System.Reactive.Linq.Observαble var md = new SingleAssignmentDisposable(); _parent._groupDisposable.Add(md); - md.Disposable = duration.SubscribeSafe(new δ(this, key, writer, md)); + md.Disposable = duration.SubscribeSafe(new Delta(this, key, writer, md)); } var element = default(TElement); @@ -163,14 +165,14 @@ namespace System.Reactive.Linq.Observαble writer.OnNext(element); } - class δ : IObserver + class Delta : IObserver { private readonly _ _parent; private readonly TKey _key; private readonly ISubject _writer; private readonly IDisposable _self; - public δ(_ parent, TKey key, ISubject writer, IDisposable self) + public Delta(_ parent, TKey key, ISubject writer, IDisposable self) { _parent = parent; _key = key; @@ -272,11 +274,38 @@ namespace System.Reactive.Linq.Observαble #if !NO_CDS class Map { +#if !NO_CDS_COLLECTIONS + // Taken from Rx\NET\Source\System.Reactive.Core\Reactive\Internal\ConcurrentDictionary.cs + + // The default concurrency level is DEFAULT_CONCURRENCY_MULTIPLIER * #CPUs. The higher the + // DEFAULT_CONCURRENCY_MULTIPLIER, the more concurrent writes can take place without interference + // and blocking, but also the more expensive operations that require all locks become (e.g. table + // resizing, ToArray, Count, etc). According to brief benchmarks that we ran, 4 seems like a good + // compromise. + private const int DEFAULT_CONCURRENCY_MULTIPLIER = 4; + + private static int DefaultConcurrencyLevel + { + get { return DEFAULT_CONCURRENCY_MULTIPLIER * Environment.ProcessorCount; } + } +#endif + private readonly System.Collections.Concurrent.ConcurrentDictionary _map; - public Map(IEqualityComparer comparer) + public Map(int? capacity, IEqualityComparer comparer) { - _map = new System.Collections.Concurrent.ConcurrentDictionary(comparer); + if (capacity.HasValue) + { +#if NO_CDS_COLLECTIONS + _map = new System.Collections.Concurrent.ConcurrentDictionary(capacity.Value, comparer); +#else + _map = new System.Collections.Concurrent.ConcurrentDictionary(DefaultConcurrencyLevel, capacity.Value, comparer); +#endif + } + else + { + _map = new System.Collections.Concurrent.ConcurrentDictionary(comparer); + } } public TValue GetOrAdd(TKey key, Func valueFactory, out bool added) @@ -327,9 +356,16 @@ namespace System.Reactive.Linq.Observαble { private readonly Dictionary _map; - public Map(IEqualityComparer comparer) + public Map(int? capacity, IEqualityComparer comparer) { - _map = new Dictionary(comparer); + if (capacity.HasValue) + { + _map = new Dictionary(capacity.Value, comparer); + } + else + { + _map = new Dictionary(comparer); + } } public TValue GetOrAdd(TKey key, Func valueFactory, out bool added) diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupJoin.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupJoin.cs index 66e49be..19c8c45 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupJoin.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/GroupJoin.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Reactive.Disposables; using System.Reactive.Subjects; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class GroupJoin : Producer { @@ -68,18 +68,18 @@ namespace System.Reactive.Linq.Observαble _rightID = 0; _rightMap = new Dictionary(); - leftSubscription.Disposable = _parent._left.SubscribeSafe(new λ(this, leftSubscription)); - rightSubscription.Disposable = _parent._right.SubscribeSafe(new ρ(this, rightSubscription)); + leftSubscription.Disposable = _parent._left.SubscribeSafe(new LeftObserver(this, leftSubscription)); + rightSubscription.Disposable = _parent._right.SubscribeSafe(new RightObserver(this, rightSubscription)); return _refCount; } - class λ : IObserver + class LeftObserver : IObserver { private readonly _ _parent; private readonly IDisposable _self; - public λ(_ parent, IDisposable self) + public LeftObserver(_ parent, IDisposable self) { _parent = parent; _self = self; @@ -122,7 +122,7 @@ namespace System.Reactive.Linq.Observαble } // BREAKING CHANGE v2 > v1.x - The duration sequence is subscribed to before the result sequence is evaluated. - md.Disposable = duration.SubscribeSafe(new δ(this, id, s, md)); + md.Disposable = duration.SubscribeSafe(new Delta(this, id, s, md)); var result = default(TResult); try @@ -146,14 +146,14 @@ namespace System.Reactive.Linq.Observαble } } - class δ : IObserver + class Delta : IObserver { - private readonly λ _parent; + private readonly LeftObserver _parent; private readonly int _id; private readonly IObserver _group; private readonly IDisposable _self; - public δ(λ parent, int id, IObserver group, IDisposable self) + public Delta(LeftObserver parent, int id, IObserver group, IDisposable self) { _parent = parent; _id = id; @@ -201,12 +201,12 @@ namespace System.Reactive.Linq.Observαble } } - class ρ : IObserver + class RightObserver : IObserver { private readonly _ _parent; private readonly IDisposable _self; - public ρ(_ parent, IDisposable self) + public RightObserver(_ parent, IDisposable self) { _parent = parent; _self = self; @@ -242,7 +242,7 @@ namespace System.Reactive.Linq.Observαble OnError(exception); return; } - md.Disposable = duration.SubscribeSafe(new δ(this, id, md)); + md.Disposable = duration.SubscribeSafe(new Delta(this, id, md)); lock (_parent._gate) { @@ -251,13 +251,13 @@ namespace System.Reactive.Linq.Observαble } } - class δ : IObserver + class Delta : IObserver { - private readonly ρ _parent; + private readonly RightObserver _parent; private readonly int _id; private readonly IDisposable _self; - public δ(ρ parent, int id, IDisposable self) + public Delta(RightObserver parent, int id, IDisposable self) { _parent = parent; _id = id; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/If.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/If.cs index 8b1804a..8740c32 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/If.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/If.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class If : Producer, IEvaluatableObservable { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/IgnoreElements.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/IgnoreElements.cs index 65441bd..1f932ac 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/IgnoreElements.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/IgnoreElements.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class IgnoreElements : Producer { @@ -14,7 +14,7 @@ namespace System.Reactive.Linq.Observαble _source = source; } - public IObservable Ω() + public IObservable Omega() { return this; } diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/IsEmpty.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/IsEmpty.cs index 674c6f8..722750e 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/IsEmpty.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/IsEmpty.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class IsEmpty : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Join.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Join.cs index 13e6ad2..4d22d34 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Join.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Join.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Join : Producer { @@ -69,18 +69,18 @@ namespace System.Reactive.Linq.Observαble _rightID = 0; _rightMap = new Dictionary(); - leftSubscription.Disposable = _parent._left.SubscribeSafe(new λ(this, leftSubscription)); - rightSubscription.Disposable = _parent._right.SubscribeSafe(new ρ(this, rightSubscription)); + leftSubscription.Disposable = _parent._left.SubscribeSafe(new LeftObserver(this, leftSubscription)); + rightSubscription.Disposable = _parent._right.SubscribeSafe(new RightObserver(this, rightSubscription)); return _group; } - class λ : IObserver + class LeftObserver : IObserver { private readonly _ _parent; private readonly IDisposable _self; - public λ(_ parent, IDisposable self) + public LeftObserver(_ parent, IDisposable self) { _parent = parent; _self = self; @@ -124,7 +124,7 @@ namespace System.Reactive.Linq.Observαble return; } - md.Disposable = duration.SubscribeSafe(new δ(this, id, md)); + md.Disposable = duration.SubscribeSafe(new Delta(this, id, md)); lock (_parent._gate) { @@ -147,13 +147,13 @@ namespace System.Reactive.Linq.Observαble } } - class δ : IObserver + class Delta : IObserver { - private readonly λ _parent; + private readonly LeftObserver _parent; private readonly int _id; private readonly IDisposable _self; - public δ(λ parent, int id, IDisposable self) + public Delta(LeftObserver parent, int id, IDisposable self) { _parent = parent; _id = id; @@ -203,12 +203,12 @@ namespace System.Reactive.Linq.Observαble } } - class ρ : IObserver + class RightObserver : IObserver { private readonly _ _parent; private readonly IDisposable _self; - public ρ(_ parent, IDisposable self) + public RightObserver(_ parent, IDisposable self) { _parent = parent; _self = self; @@ -252,7 +252,7 @@ namespace System.Reactive.Linq.Observαble return; } - md.Disposable = duration.SubscribeSafe(new δ(this, id, md)); + md.Disposable = duration.SubscribeSafe(new Delta(this, id, md)); lock (_parent._gate) { @@ -275,13 +275,13 @@ namespace System.Reactive.Linq.Observαble } } - class δ : IObserver + class Delta : IObserver { - private readonly ρ _parent; + private readonly RightObserver _parent; private readonly int _id; private readonly IDisposable _self; - public δ(ρ parent, int id, IDisposable self) + public Delta(RightObserver parent, int id, IDisposable self) { _parent = parent; _id = id; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/LastAsync.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/LastAsync.cs index 1ecd930..0a77d32 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/LastAsync.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/LastAsync.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class LastAsync : Producer { @@ -22,7 +22,7 @@ namespace System.Reactive.Linq.Observαble { if (_predicate != null) { - var sink = new π(this, observer, cancel); + var sink = new LastAsyncImpl(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -77,13 +77,13 @@ namespace System.Reactive.Linq.Observαble } } - class π : Sink, IObserver + class LastAsyncImpl : Sink, IObserver { private readonly LastAsync _parent; private TSource _value; private bool _seenValue; - public π(LastAsync parent, IObserver observer, IDisposable cancel) + public LastAsyncImpl(LastAsync parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Latest.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Latest.cs index 2699797..bc92e6d 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Latest.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Latest.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Reactive.Threading; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Latest : PushToPullAdapter { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/LongCount.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/LongCount.cs index 0108e18..63c9f24 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/LongCount.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/LongCount.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class LongCount : Producer { @@ -31,7 +31,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new π(this, observer, cancel); + var sink = new LongCountImpl(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -77,12 +77,12 @@ namespace System.Reactive.Linq.Observαble } } - class π : Sink, IObserver + class LongCountImpl : Sink, IObserver { private readonly LongCount _parent; private long _count; - public π(LongCount parent, IObserver observer, IDisposable cancel) + public LongCountImpl(LongCount parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Materialize.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Materialize.cs index 102267d..fa8e1ee 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Materialize.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Materialize.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Materialize : Producer> { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Max.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Max.cs index da339da..8e86e75 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Max.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Max.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Max : Producer { @@ -28,19 +28,19 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new δ(this, observer, cancel); + var sink = new Delta(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } } - class δ : Sink, IObserver + class Delta : Sink, IObserver { private readonly Max _parent; private bool _hasValue; private TSource _lastValue; - public δ(Max parent, IObserver observer, IDisposable cancel) + public Delta(Max parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MaxBy.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MaxBy.cs index 52a9a42..4bf97f5 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MaxBy.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MaxBy.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class MaxBy : Producer> { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Merge.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Merge.cs index a27c3c3..dd710cb 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Merge.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Merge.cs @@ -10,7 +10,7 @@ using System.Threading; using System.Threading.Tasks; #endif -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Merge : Producer { @@ -41,14 +41,14 @@ namespace System.Reactive.Linq.Observαble { if (_maxConcurrent > 0) { - var sink = new μ(this, observer, cancel); + var sink = new MergeConcurrent(this, observer, cancel); setSink(sink); return sink.Run(); } #if !NO_TPL else if (_sourcesT != null) { - var sink = new τ(this, observer, cancel); + var sink = new MergeImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -93,7 +93,7 @@ namespace System.Reactive.Linq.Observαble { var innerSubscription = new SingleAssignmentDisposable(); _group.Add(innerSubscription); - innerSubscription.Disposable = value.SubscribeSafe(new ι(this, innerSubscription)); + innerSubscription.Disposable = value.SubscribeSafe(new Iter(this, innerSubscription)); } public void OnError(Exception error) @@ -129,12 +129,12 @@ namespace System.Reactive.Linq.Observαble } } - class ι : IObserver + class Iter : IObserver { private readonly _ _parent; private readonly IDisposable _self; - public ι(_ parent, IDisposable self) + public Iter(_ parent, IDisposable self) { _parent = parent; _self = self; @@ -177,11 +177,11 @@ namespace System.Reactive.Linq.Observαble } } - class μ : Sink, IObserver> + class MergeConcurrent : Sink, IObserver> { private readonly Merge _parent; - public μ(Merge parent, IObserver observer, IDisposable cancel) + public MergeConcurrent(Merge parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -253,15 +253,15 @@ namespace System.Reactive.Linq.Observαble { var subscription = new SingleAssignmentDisposable(); _group.Add(subscription); - subscription.Disposable = innerSource.SubscribeSafe(new ι(this, subscription)); + subscription.Disposable = innerSource.SubscribeSafe(new Iter(this, subscription)); } - class ι : IObserver + class Iter : IObserver { - private readonly μ _parent; + private readonly MergeConcurrent _parent; private readonly IDisposable _self; - public ι(μ parent, IDisposable self) + public Iter(MergeConcurrent parent, IDisposable self) { _parent = parent; _self = self; @@ -308,11 +308,11 @@ namespace System.Reactive.Linq.Observαble #if !NO_TPL #pragma warning disable 0420 - class τ : Sink, IObserver> + class MergeImpl : Sink, IObserver> { private readonly Merge _parent; - public τ(Merge parent, IObserver observer, IDisposable cancel) + public MergeImpl(Merge parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Min.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Min.cs index f7b6197..fc08002 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Min.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Min.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Min : Producer { @@ -28,19 +28,19 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new δ(this, observer, cancel); + var sink = new Delta(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } } - class δ : Sink, IObserver + class Delta : Sink, IObserver { private readonly Min _parent; private bool _hasValue; private TSource _lastValue; - public δ(Min parent, IObserver observer, IDisposable cancel) + public Delta(Min parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MinBy.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MinBy.cs index a32bf92..d9c93f6 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MinBy.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MinBy.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class MinBy : Producer> { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MostRecent.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MostRecent.cs index 937d811..7311a33 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MostRecent.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/MostRecent.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class MostRecent : PushToPullAdapter { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Multicast.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Multicast.cs index 4a77300..ee163a5 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Multicast.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Multicast.cs @@ -5,7 +5,7 @@ using System; using System.Reactive.Disposables; using System.Reactive.Subjects; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Multicast : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Never.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Never.cs index a9adc52..eae632f 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Never.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Never.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Never : IObservable { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Next.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Next.cs index 2d4ec45..4b20276 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Next.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Next.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Reactive.Threading; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Next : PushToPullAdapter { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ObserveOn.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ObserveOn.cs index d5d7428..eaf7613 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ObserveOn.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ObserveOn.cs @@ -5,7 +5,7 @@ using System; using System.Reactive.Concurrency; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class ObserveOn : Producer { @@ -33,7 +33,7 @@ namespace System.Reactive.Linq.Observαble #if !NO_SYNCCTX if (_context != null) { - var sink = new ς(this, observer, cancel); + var sink = new ObserveOnImpl(this, observer, cancel); setSink(sink); return _source.Subscribe(sink); } @@ -47,11 +47,11 @@ namespace System.Reactive.Linq.Observαble } #if !NO_SYNCCTX - class ς : Sink, IObserver + class ObserveOnImpl : Sink, IObserver { private readonly ObserveOn _parent; - public ς(ObserveOn parent, IObserver observer, IDisposable cancel) + public ObserveOnImpl(ObserveOn parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/OfType.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/OfType.cs index 07e4515..27a0ca3 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/OfType.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/OfType.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class OfType : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/OnErrorResumeNext.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/OnErrorResumeNext.cs index 26dfd34..077a23f 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/OnErrorResumeNext.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/OnErrorResumeNext.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class OnErrorResumeNext : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/PushToPullAdapter.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/PushToPullAdapter.cs index 916d12b..6351365 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/PushToPullAdapter.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/PushToPullAdapter.cs @@ -5,7 +5,7 @@ using System.Collections; using System.Collections.Generic; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { abstract class PushToPullAdapter : IEnumerable { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Range.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Range.cs index c58d94c..414ae72 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Range.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Range.cs @@ -5,7 +5,7 @@ using System; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Range : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/RefCount.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/RefCount.cs index 1762807..4efb917 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/RefCount.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/RefCount.cs @@ -5,7 +5,7 @@ using System; using System.Reactive.Disposables; using System.Reactive.Subjects; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class RefCount : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Repeat.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Repeat.cs index fab0607..4f418cb 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Repeat.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Repeat.cs @@ -5,7 +5,7 @@ using System; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Repeat : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Return.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Return.cs index cd9ad02..db98f88 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Return.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Return.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Concurrency; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Return : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Sample.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Sample.cs index 0d46c62..6d0e68b 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Sample.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Sample.cs @@ -5,7 +5,7 @@ using System; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Sample : Producer { @@ -51,7 +51,7 @@ namespace System.Reactive.Linq.Observαble _sourceSubscription = sourceSubscription; sourceSubscription.Disposable = _parent._source.SubscribeSafe(this); - var samplerSubscription = _parent._sampler.SubscribeSafe(new σ(this)); + var samplerSubscription = _parent._sampler.SubscribeSafe(new SampleImpl(this)); return new CompositeDisposable(_sourceSubscription, samplerSubscription); } @@ -83,11 +83,11 @@ namespace System.Reactive.Linq.Observαble } } - class σ : IObserver + class SampleImpl : IObserver { private readonly _ _parent; - public σ(_ parent) + public SampleImpl(_ parent) { _parent = parent; } diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Scan.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Scan.cs index 6c8f2fe..421177f 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Scan.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Scan.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Scan : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Select.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Select.cs index e853210..330fe3a 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Select.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Select.cs @@ -3,11 +3,11 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { abstract class Select : Producer { - public abstract IObservable Ω(Func selector); + public abstract IObservable Omega(Func selector); } class Select : Select @@ -28,7 +28,7 @@ namespace System.Reactive.Linq.Observαble _selectorI = selector; } - public override IObservable Ω(Func selector) + public override IObservable Omega(Func selector) { if (_selector != null) return new Select(_source, x => selector(_selector(x))); @@ -46,7 +46,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new τ(this, observer, cancel); + var sink = new SelectImpl(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -92,12 +92,12 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink, IObserver + class SelectImpl : Sink, IObserver { private readonly Select _parent; private int _index; - public τ(Select parent, IObserver observer, IDisposable cancel) + public SelectImpl(Select parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SelectMany.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SelectMany.cs index 054f974..49d7cf9 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SelectMany.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SelectMany.cs @@ -1,9 +1,7 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. #if !NO_PERF -using System; using System.Collections.Generic; -using System.Reactive; using System.Reactive.Disposables; #if !NO_TPL @@ -11,17 +9,17 @@ using System.Threading; using System.Threading.Tasks; #endif -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class SelectMany : Producer { private readonly IObservable _source; private readonly Func> _collectionSelector; - private readonly Func> _collectionSelectorWithIndex; + private readonly Func> _collectionSelectorI; private readonly Func> _collectionSelectorE; - private readonly Func> _collectionSelectorEWithIndex; + private readonly Func> _collectionSelectorEI; private readonly Func _resultSelector; - private readonly Func _resultSelectorWithIndex; + private readonly Func _resultSelectorI; public SelectMany(IObservable source, Func> collectionSelector, Func resultSelector) { @@ -33,8 +31,8 @@ namespace System.Reactive.Linq.Observαble public SelectMany(IObservable source, Func> collectionSelector, Func resultSelector) { _source = source; - _collectionSelectorWithIndex = collectionSelector; - _resultSelectorWithIndex = resultSelector; + _collectionSelectorI = collectionSelector; + _resultSelectorI = resultSelector; } public SelectMany(IObservable source, Func> collectionSelector, Func resultSelector) @@ -47,12 +45,14 @@ namespace System.Reactive.Linq.Observαble public SelectMany(IObservable source, Func> collectionSelector, Func resultSelector) { _source = source; - _collectionSelectorEWithIndex = collectionSelector; - _resultSelectorWithIndex = resultSelector; + _collectionSelectorEI = collectionSelector; + _resultSelectorI = resultSelector; } #if !NO_TPL private readonly Func> _collectionSelectorT; + private readonly Func> _collectionSelectorTI; + private readonly Func _resultSelectorTI; public SelectMany(IObservable source, Func> collectionSelector, Func resultSelector) { @@ -60,27 +60,52 @@ namespace System.Reactive.Linq.Observαble _collectionSelectorT = collectionSelector; _resultSelector = resultSelector; } + + public SelectMany(IObservable source, Func> collectionSelector, Func resultSelector) + { + _source = source; + _collectionSelectorTI = collectionSelector; + _resultSelectorTI = resultSelector; + } #endif protected override IDisposable Run(IObserver observer, IDisposable cancel, Action setSink) { - if (_collectionSelector != null || _collectionSelectorWithIndex != null) + if (_collectionSelector != null) { var sink = new _(this, observer, cancel); setSink(sink); return sink.Run(); } + else if (_collectionSelectorI != null) + { + var sink = new IndexSelectorImpl(this, observer, cancel); + setSink(sink); + return sink.Run(); + } #if !NO_TPL else if (_collectionSelectorT != null) { - var sink = new τ(this, observer, cancel); + var sink = new SelectManyImpl(this, observer, cancel); + setSink(sink); + return sink.Run(); + } + else if (_collectionSelectorTI != null) + { + var sink = new Sigma(this, observer, cancel); setSink(sink); return sink.Run(); } #endif + else if (_collectionSelectorE != null) + { + var sink = new NoSelectorImpl(this, observer, cancel); + setSink(sink); + return _source.SubscribeSafe(sink); + } else { - var sink = new ε(this, observer, cancel); + var sink = new Omega(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -94,14 +119,12 @@ namespace System.Reactive.Linq.Observαble : base(observer, cancel) { _parent = parent; - _indexInSource = -1; } private object _gate; private bool _isStopped; private CompositeDisposable _group; private SingleAssignmentDisposable _sourceSubscription; - private int _indexInSource; public IDisposable Run() { @@ -122,13 +145,7 @@ namespace System.Reactive.Linq.Observαble try { - if (_parent._collectionSelector != null) - collection = _parent._collectionSelector(value); - else - { - checked { _indexInSource++; } - collection = _parent._collectionSelectorWithIndex(value, _indexInSource); - } + collection = _parent._collectionSelector(value); } catch (Exception ex) { @@ -142,7 +159,7 @@ namespace System.Reactive.Linq.Observαble var innerSubscription = new SingleAssignmentDisposable(); _group.Add(innerSubscription); - innerSubscription.Disposable = collection.SubscribeSafe(new ι(this, value, innerSubscription, _indexInSource)); + innerSubscription.Disposable = collection.SubscribeSafe(new Iter(this, value, innerSubscription)); } public void OnError(Exception error) @@ -178,21 +195,17 @@ namespace System.Reactive.Linq.Observαble } } - class ι : IObserver + class Iter : IObserver { private readonly _ _parent; private readonly TSource _value; private readonly IDisposable _self; - private int _indexInSource; - private int _indexInIntermediate = -1; - public ι(_ parent, TSource value, IDisposable self, int indexInSource) + public Iter(_ parent, TSource value, IDisposable self) { _parent = parent; _value = value; _self = self; - _indexInSource = indexInSource; - _indexInIntermediate = -1; } public void OnNext(TCollection value) @@ -201,14 +214,164 @@ namespace System.Reactive.Linq.Observαble try { - if (_parent._parent._resultSelector != null) - res = _parent._parent._resultSelector(_value, value); - else + res = _parent._parent._resultSelector(_value, value); + } + catch (Exception ex) + { + lock (_parent._gate) + { + _parent._observer.OnError(ex); + _parent.Dispose(); + } + return; + } + + lock (_parent._gate) + _parent._observer.OnNext(res); + } + + public void OnError(Exception error) + { + lock (_parent._gate) + { + _parent._observer.OnError(error); + _parent.Dispose(); + } + } + + public void OnCompleted() + { + _parent._group.Remove(_self); + if (_parent._isStopped && _parent._group.Count == 1) + { + // + // Notice there can be a race between OnCompleted of the source and any + // of the inner sequences, where both see _group.Count == 1, and one is + // waiting for the lock. There won't be a double OnCompleted observation + // though, because the call to Dispose silences the observer by swapping + // in a NopObserver. + // + lock (_parent._gate) { - checked { _indexInIntermediate++; } - res = _parent._parent._resultSelectorWithIndex(_value, _indexInSource, value, _indexInIntermediate); + _parent._observer.OnCompleted(); + _parent.Dispose(); } } + } + } + } + + class IndexSelectorImpl : Sink, IObserver + { + private readonly SelectMany _parent; + + public IndexSelectorImpl(SelectMany parent, IObserver observer, IDisposable cancel) + : base(observer, cancel) + { + _parent = parent; + } + + private object _gate; + private bool _isStopped; + private CompositeDisposable _group; + private SingleAssignmentDisposable _sourceSubscription; + private int _index; + + public IDisposable Run() + { + _gate = new object(); + _isStopped = false; + _group = new CompositeDisposable(); + + _sourceSubscription = new SingleAssignmentDisposable(); + _group.Add(_sourceSubscription); + _sourceSubscription.Disposable = _parent._source.SubscribeSafe(this); + + return _group; + } + + public void OnNext(TSource value) + { + var index = checked(_index++); + var collection = default(IObservable); + + try + { + collection = _parent._collectionSelectorI(value, index); + } + catch (Exception ex) + { + lock (_gate) + { + base._observer.OnError(ex); + base.Dispose(); + } + return; + } + + var innerSubscription = new SingleAssignmentDisposable(); + _group.Add(innerSubscription); + innerSubscription.Disposable = collection.SubscribeSafe(new Iter(this, value, index, innerSubscription)); + } + + public void OnError(Exception error) + { + lock (_gate) + { + base._observer.OnError(error); + base.Dispose(); + } + } + + public void OnCompleted() + { + _isStopped = true; + if (_group.Count == 1) + { + // + // Notice there can be a race between OnCompleted of the source and any + // of the inner sequences, where both see _group.Count == 1, and one is + // waiting for the lock. There won't be a double OnCompleted observation + // though, because the call to Dispose silences the observer by swapping + // in a NopObserver. + // + lock (_gate) + { + base._observer.OnCompleted(); + base.Dispose(); + } + } + else + { + _sourceSubscription.Dispose(); + } + } + + class Iter : IObserver + { + private readonly IndexSelectorImpl _parent; + private readonly TSource _value; + private readonly int _valueIndex; + private readonly IDisposable _self; + + public Iter(IndexSelectorImpl parent, TSource value, int index, IDisposable self) + { + _parent = parent; + _value = value; + _valueIndex = index; + _self = self; + } + + private int _index; + + public void OnNext(TCollection value) + { + var res = default(TResult); + + try + { + res = _parent._parent._resultSelectorI(_value, _valueIndex, value, checked(_index++)); + } catch (Exception ex) { lock (_parent._gate) @@ -254,16 +417,14 @@ namespace System.Reactive.Linq.Observαble } } - class ε : Sink, IObserver + class NoSelectorImpl : Sink, IObserver { private readonly SelectMany _parent; - private int _indexInSource; // The "Weird SelectMany" requires indices in the original collection as well as an intermediate collection - public ε(SelectMany parent, IObserver observer, IDisposable cancel) + public NoSelectorImpl(SelectMany parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; - _indexInSource = -1; } public void OnNext(TSource value) @@ -271,14 +432,93 @@ namespace System.Reactive.Linq.Observαble var xs = default(IEnumerable); try { - if (_parent._collectionSelectorE != null) - xs = _parent._collectionSelectorE(value); - else + xs = _parent._collectionSelectorE(value); + } + catch (Exception exception) + { + base._observer.OnError(exception); + base.Dispose(); + return; + } + + var e = default(IEnumerator); + try + { + e = xs.GetEnumerator(); + } + catch (Exception exception) + { + base._observer.OnError(exception); + base.Dispose(); + return; + } + + try + { + var hasNext = true; + while (hasNext) { - checked { _indexInSource++; } - xs = _parent._collectionSelectorEWithIndex(value, _indexInSource); + hasNext = false; + var current = default(TResult); + + try + { + hasNext = e.MoveNext(); + if (hasNext) + current = _parent._resultSelector(value, e.Current); + } + catch (Exception exception) + { + base._observer.OnError(exception); + base.Dispose(); + return; + } + + if (hasNext) + base._observer.OnNext(current); } } + finally + { + if (e != null) + e.Dispose(); + } + } + + public void OnError(Exception error) + { + base._observer.OnError(error); + base.Dispose(); + } + + public void OnCompleted() + { + base._observer.OnCompleted(); + base.Dispose(); + } + } + + class Omega : Sink, IObserver + { + private readonly SelectMany _parent; + + public Omega(SelectMany parent, IObserver observer, IDisposable cancel) + : base(observer, cancel) + { + _parent = parent; + } + + private int _index; + + public void OnNext(TSource value) + { + var index = checked(_index++); + + var xs = default(IEnumerable); + try + { + xs = _parent._collectionSelectorEI(value, index); + } catch (Exception exception) { base._observer.OnError(exception); @@ -300,7 +540,7 @@ namespace System.Reactive.Linq.Observαble try { - int indexInIntermediate = -1; + var eIndex = 0; var hasNext = true; while (hasNext) { @@ -311,15 +551,7 @@ namespace System.Reactive.Linq.Observαble { hasNext = e.MoveNext(); if (hasNext) - { - if (_parent._resultSelector != null) - current = _parent._resultSelector(value, e.Current); - else - { - checked { indexInIntermediate++; } - current = _parent._resultSelectorWithIndex(value, _indexInSource, e.Current, indexInIntermediate); - } - } + current = _parent._resultSelectorI(value, index, e.Current, checked(eIndex++)); } catch (Exception exception) { @@ -354,11 +586,11 @@ namespace System.Reactive.Linq.Observαble #if !NO_TPL #pragma warning disable 0420 - class τ : Sink, IObserver + class SelectManyImpl : Sink, IObserver { private readonly SelectMany _parent; - public τ(SelectMany parent, IObserver observer, IDisposable cancel) + public SelectManyImpl(SelectMany parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -487,48 +719,183 @@ namespace System.Reactive.Linq.Observαble } } } -#pragma warning restore 0420 -#endif - } - - class SelectMany : Producer - { - private readonly IObservable _source; - private readonly Func> _selector; - private readonly Func> _selectorOnError; - private readonly Func> _selectorOnCompleted; - private readonly Func> _selectorWithIndex; - private readonly Func> _selectorWithIndexOnError; - private readonly Func> _selectorWithIndexOnCompleted; - private readonly Func> _selectorE; - private readonly Func> _selectorEWithIndex; - public SelectMany(IObservable source, Func> selector) + class Sigma : Sink, IObserver { - _source = source; - _selector = selector; + private readonly SelectMany _parent; + + public Sigma(SelectMany parent, IObserver observer, IDisposable cancel) + : base(observer, cancel) + { + _parent = parent; + } + + private object _gate; + private CancellationDisposable _cancel; + private volatile int _count; + private int _index; + + public IDisposable Run() + { + _gate = new object(); + _cancel = new CancellationDisposable(); + _count = 1; + + return new CompositeDisposable(_parent._source.SubscribeSafe(this), _cancel); + } + + public void OnNext(TSource value) + { + var index = checked(_index++); + + var task = default(Task); + try + { + Interlocked.Increment(ref _count); + task = _parent._collectionSelectorTI(value, index, _cancel.Token); + } + catch (Exception ex) + { + lock (_gate) + { + base._observer.OnError(ex); + base.Dispose(); + } + + return; + } + + if (task.IsCompleted) + { + OnCompletedTask(value, index, task); + } + else + { + AttachContinuation(value, index, task); + } + } + + private void AttachContinuation(TSource value, int index, Task task) + { + // + // Separate method to avoid closure in synchronous completion case. + // + task.ContinueWith(t => OnCompletedTask(value, index, t)); + } + + private void OnCompletedTask(TSource value, int index, Task task) + { + switch (task.Status) + { + case TaskStatus.RanToCompletion: + { + var res = default(TResult); + try + { + res = _parent._resultSelectorTI(value, index, task.Result); + } + catch (Exception ex) + { + lock (_gate) + { + base._observer.OnError(ex); + base.Dispose(); + } + + return; + } + + lock (_gate) + base._observer.OnNext(res); + + OnCompleted(); + } + break; + case TaskStatus.Faulted: + { + lock (_gate) + { + base._observer.OnError(task.Exception.InnerException); + base.Dispose(); + } + } + break; + case TaskStatus.Canceled: + { + if (!_cancel.IsDisposed) + { + lock (_gate) + { + base._observer.OnError(new TaskCanceledException(task)); + base.Dispose(); + } + } + } + break; + } + } + + public void OnError(Exception error) + { + lock (_gate) + { + base._observer.OnError(error); + base.Dispose(); + } + } + + public void OnCompleted() + { + if (Interlocked.Decrement(ref _count) == 0) + { + lock (_gate) + { + base._observer.OnCompleted(); + base.Dispose(); + } + } + } } +#pragma warning restore 0420 +#endif + } - public SelectMany(IObservable source, Func> selector, Func> selectorOnError, Func> selectorOnCompleted) + class SelectMany : Producer + { + private readonly IObservable _source; + private readonly Func> _selector; + private readonly Func> _selectorI; + private readonly Func> _selectorOnError; + private readonly Func> _selectorOnCompleted; + private readonly Func> _selectorE; + private readonly Func> _selectorEI; + + public SelectMany(IObservable source, Func> selector) { _source = source; _selector = selector; - _selectorOnError = selectorOnError; - _selectorOnCompleted = selectorOnCompleted; } public SelectMany(IObservable source, Func> selector) { _source = source; - _selectorWithIndex = selector; + _selectorI = selector; + } + + public SelectMany(IObservable source, Func> selector, Func> selectorOnError, Func> selectorOnCompleted) + { + _source = source; + _selector = selector; + _selectorOnError = selectorOnError; + _selectorOnCompleted = selectorOnCompleted; } - public SelectMany(IObservable source, Func> selector, Func> selectorOnError, Func> selectorOnCompleted) + public SelectMany(IObservable source, Func> selector, Func> selectorOnError, Func> selectorOnCompleted) { _source = source; - _selectorWithIndex = selector; - _selectorWithIndexOnError = selectorOnError; - _selectorWithIndexOnCompleted = selectorOnCompleted; + _selectorI = selector; + _selectorOnError = selectorOnError; + _selectorOnCompleted = selectorOnCompleted; } public SelectMany(IObservable source, Func> selector) @@ -540,52 +907,264 @@ namespace System.Reactive.Linq.Observαble public SelectMany(IObservable source, Func> selector) { _source = source; - _selectorEWithIndex = selector; + _selectorEI = selector; } #if !NO_TPL private readonly Func> _selectorT; + private readonly Func> _selectorTI; public SelectMany(IObservable source, Func> selector) { _source = source; _selectorT = selector; } + + public SelectMany(IObservable source, Func> selector) + { + _source = source; + _selectorTI = selector; + } #endif protected override IDisposable Run(IObserver observer, IDisposable cancel, Action setSink) { - if (_selector != null || _selectorWithIndex != null) + if (_selector != null) { var sink = new _(this, observer, cancel); setSink(sink); return sink.Run(); } -#if !NO_TPL - else if (_selectorT != null) + else if (_selectorI != null) + { + var sink = new IndexSelectorImpl(this, observer, cancel); + setSink(sink); + return sink.Run(); + } +#if !NO_TPL + else if (_selectorT != null) + { + var sink = new SelectManyImpl(this, observer, cancel); + setSink(sink); + return sink.Run(); + } + else if (_selectorTI != null) + { + var sink = new Sigma(this, observer, cancel); + setSink(sink); + return sink.Run(); + } +#endif + else if (_selectorE != null) + { + var sink = new NoSelectorImpl(this, observer, cancel); + setSink(sink); + return _source.SubscribeSafe(sink); + } + else + { + var sink = new Omega(this, observer, cancel); + setSink(sink); + return _source.SubscribeSafe(sink); + } + } + + class _ : Sink, IObserver + { + private readonly SelectMany _parent; + + public _(SelectMany parent, IObserver observer, IDisposable cancel) + : base(observer, cancel) + { + _parent = parent; + } + + private object _gate; + private bool _isStopped; + private CompositeDisposable _group; + private SingleAssignmentDisposable _sourceSubscription; + + public IDisposable Run() + { + _gate = new object(); + _isStopped = false; + _group = new CompositeDisposable(); + + _sourceSubscription = new SingleAssignmentDisposable(); + _group.Add(_sourceSubscription); + _sourceSubscription.Disposable = _parent._source.SubscribeSafe(this); + + return _group; + } + + public void OnNext(TSource value) + { + var inner = default(IObservable); + + try + { + inner = _parent._selector(value); + } + catch (Exception ex) + { + lock (_gate) + { + base._observer.OnError(ex); + base.Dispose(); + } + return; + } + + SubscribeInner(inner); + } + + public void OnError(Exception error) + { + if (_parent._selectorOnError != null) + { + var inner = default(IObservable); + + try + { + inner = _parent._selectorOnError(error); + } + catch (Exception ex) + { + lock (_gate) + { + base._observer.OnError(ex); + base.Dispose(); + } + return; + } + + SubscribeInner(inner); + + Final(); + } + else + { + lock (_gate) + { + base._observer.OnError(error); + base.Dispose(); + } + } + } + + public void OnCompleted() + { + if (_parent._selectorOnCompleted != null) + { + var inner = default(IObservable); + + try + { + inner = _parent._selectorOnCompleted(); + } + catch (Exception ex) + { + lock (_gate) + { + base._observer.OnError(ex); + base.Dispose(); + } + return; + } + + SubscribeInner(inner); + } + + Final(); + } + + private void Final() + { + _isStopped = true; + if (_group.Count == 1) + { + // + // Notice there can be a race between OnCompleted of the source and any + // of the inner sequences, where both see _group.Count == 1, and one is + // waiting for the lock. There won't be a double OnCompleted observation + // though, because the call to Dispose silences the observer by swapping + // in a NopObserver. + // + lock (_gate) + { + base._observer.OnCompleted(); + base.Dispose(); + } + } + else + { + _sourceSubscription.Dispose(); + } + } + + private void SubscribeInner(IObservable inner) { - var sink = new τ(this, observer, cancel); - setSink(sink); - return sink.Run(); + var innerSubscription = new SingleAssignmentDisposable(); + _group.Add(innerSubscription); + innerSubscription.Disposable = inner.SubscribeSafe(new Iter(this, innerSubscription)); } -#endif - else + + class Iter : IObserver { - var sink = new ε(this, observer, cancel); - setSink(sink); - return _source.SubscribeSafe(sink); + private readonly _ _parent; + private readonly IDisposable _self; + + public Iter(_ parent, IDisposable self) + { + _parent = parent; + _self = self; + } + + public void OnNext(TResult value) + { + lock (_parent._gate) + _parent._observer.OnNext(value); + } + + public void OnError(Exception error) + { + lock (_parent._gate) + { + _parent._observer.OnError(error); + _parent.Dispose(); + } + } + + public void OnCompleted() + { + _parent._group.Remove(_self); + if (_parent._isStopped && _parent._group.Count == 1) + { + // + // Notice there can be a race between OnCompleted of the source and any + // of the inner sequences, where both see _group.Count == 1, and one is + // waiting for the lock. There won't be a double OnCompleted observation + // though, because the call to Dispose silences the observer by swapping + // in a NopObserver. + // + lock (_parent._gate) + { + _parent._observer.OnCompleted(); + _parent.Dispose(); + } + } + } } } - class _ : Sink, IObserver + class IndexSelectorImpl : Sink, IObserver { private readonly SelectMany _parent; - public _(SelectMany parent, IObserver observer, IDisposable cancel) + public IndexSelectorImpl(SelectMany parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; - _index = -1; } private object _gate; @@ -613,13 +1192,7 @@ namespace System.Reactive.Linq.Observαble try { - if (_parent._selector != null) - inner = _parent._selector(value); - else - { - checked { _index++; } - inner = _parent._selectorWithIndex(value, _index); - } + inner = _parent._selectorI(value, checked(_index++)); } catch (Exception ex) { @@ -642,13 +1215,7 @@ namespace System.Reactive.Linq.Observαble try { - if (_parent._selectorOnError != null) - inner = _parent._selectorOnError(error); - else - { - checked { _index++; } - inner = _parent._selectorWithIndexOnError(error, _index); - } + inner = _parent._selectorOnError(error); } catch (Exception ex) { @@ -682,10 +1249,7 @@ namespace System.Reactive.Linq.Observαble try { - if (_parent._selectorOnCompleted != null) - inner = _parent._selectorOnCompleted(); - else - inner = _parent._selectorWithIndexOnCompleted(_index); + inner = _parent._selectorOnCompleted(); } catch (Exception ex) { @@ -731,15 +1295,15 @@ namespace System.Reactive.Linq.Observαble { var innerSubscription = new SingleAssignmentDisposable(); _group.Add(innerSubscription); - innerSubscription.Disposable = inner.SubscribeSafe(new ι(this, innerSubscription)); + innerSubscription.Disposable = inner.SubscribeSafe(new Iter(this, innerSubscription)); } - class ι : IObserver + class Iter : IObserver { - private readonly _ _parent; + private readonly IndexSelectorImpl _parent; private readonly IDisposable _self; - public ι(_ parent, IDisposable self) + public Iter(IndexSelectorImpl parent, IDisposable self) { _parent = parent; _self = self; @@ -782,16 +1346,14 @@ namespace System.Reactive.Linq.Observαble } } - class ε : Sink, IObserver + class NoSelectorImpl : Sink, IObserver { private readonly SelectMany _parent; - private int _index; - public ε(SelectMany parent, IObserver observer, IDisposable cancel) + public NoSelectorImpl(SelectMany parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; - _index = -1; } public void OnNext(TSource value) @@ -799,14 +1361,91 @@ namespace System.Reactive.Linq.Observαble var xs = default(IEnumerable); try { - if (_parent._selectorE != null) - xs = _parent._selectorE(value); - else + xs = _parent._selectorE(value); + } + catch (Exception exception) + { + base._observer.OnError(exception); + base.Dispose(); + return; + } + + var e = default(IEnumerator); + try + { + e = xs.GetEnumerator(); + } + catch (Exception exception) + { + base._observer.OnError(exception); + base.Dispose(); + return; + } + + try + { + var hasNext = true; + while (hasNext) { - checked { _index++; } - xs = _parent._selectorEWithIndex(value, _index); + hasNext = false; + var current = default(TResult); + + try + { + hasNext = e.MoveNext(); + if (hasNext) + current = e.Current; + } + catch (Exception exception) + { + base._observer.OnError(exception); + base.Dispose(); + return; + } + + if (hasNext) + base._observer.OnNext(current); } } + finally + { + if (e != null) + e.Dispose(); + } + } + + public void OnError(Exception error) + { + base._observer.OnError(error); + base.Dispose(); + } + + public void OnCompleted() + { + base._observer.OnCompleted(); + base.Dispose(); + } + } + + class Omega : Sink, IObserver + { + private readonly SelectMany _parent; + + public Omega(SelectMany parent, IObserver observer, IDisposable cancel) + : base(observer, cancel) + { + _parent = parent; + } + + private int _index; + + public void OnNext(TSource value) + { + var xs = default(IEnumerable); + try + { + xs = _parent._selectorEI(value, checked(_index++)); + } catch (Exception exception) { base._observer.OnError(exception); @@ -873,11 +1512,11 @@ namespace System.Reactive.Linq.Observαble #if !NO_TPL #pragma warning disable 0420 - class τ : Sink, IObserver + class SelectManyImpl : Sink, IObserver { private readonly SelectMany _parent; - public τ(SelectMany parent, IObserver observer, IDisposable cancel) + public SelectManyImpl(SelectMany parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -982,6 +1621,117 @@ namespace System.Reactive.Linq.Observαble } } } + + class Sigma : Sink, IObserver + { + private readonly SelectMany _parent; + + public Sigma(SelectMany parent, IObserver observer, IDisposable cancel) + : base(observer, cancel) + { + _parent = parent; + } + + private object _gate; + private CancellationDisposable _cancel; + private volatile int _count; + private int _index; + + public IDisposable Run() + { + _gate = new object(); + _cancel = new CancellationDisposable(); + _count = 1; + + return new CompositeDisposable(_parent._source.SubscribeSafe(this), _cancel); + } + + public void OnNext(TSource value) + { + var task = default(Task); + try + { + Interlocked.Increment(ref _count); + task = _parent._selectorTI(value, checked(_index++), _cancel.Token); + } + catch (Exception ex) + { + lock (_gate) + { + base._observer.OnError(ex); + base.Dispose(); + } + + return; + } + + if (task.IsCompleted) + { + OnCompletedTask(task); + } + else + { + task.ContinueWith(OnCompletedTask); + } + } + + private void OnCompletedTask(Task task) + { + switch (task.Status) + { + case TaskStatus.RanToCompletion: + { + lock (_gate) + base._observer.OnNext(task.Result); + + OnCompleted(); + } + break; + case TaskStatus.Faulted: + { + lock (_gate) + { + base._observer.OnError(task.Exception.InnerException); + base.Dispose(); + } + } + break; + case TaskStatus.Canceled: + { + if (!_cancel.IsDisposed) + { + lock (_gate) + { + base._observer.OnError(new TaskCanceledException(task)); + base.Dispose(); + } + } + } + break; + } + } + + public void OnError(Exception error) + { + lock (_gate) + { + base._observer.OnError(error); + base.Dispose(); + } + } + + public void OnCompleted() + { + if (Interlocked.Decrement(ref _count) == 0) + { + lock (_gate) + { + base._observer.OnCompleted(); + base.Dispose(); + } + } + } + } #pragma warning restore 0420 #endif } diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SequenceEqual.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SequenceEqual.cs index 4661f82..6b03aba 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SequenceEqual.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SequenceEqual.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class SequenceEqual : Producer { @@ -38,7 +38,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new ε(this, observer, cancel); + var sink = new SequenceEqualImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -226,11 +226,11 @@ namespace System.Reactive.Linq.Observαble } } - class ε : Sink, IObserver + class SequenceEqualImpl : Sink, IObserver { private readonly SequenceEqual _parent; - public ε(SequenceEqual parent, IObserver observer, IDisposable cancel) + public SequenceEqualImpl(SequenceEqual parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SingleAsync.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SingleAsync.cs index 19c07e5..c4dce4a 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SingleAsync.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SingleAsync.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class SingleAsync : Producer { @@ -22,7 +22,7 @@ namespace System.Reactive.Linq.Observαble { if (_predicate != null) { - var sink = new π(this, observer, cancel); + var sink = new SingleAsyncImpl(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -84,13 +84,13 @@ namespace System.Reactive.Linq.Observαble } } - class π : Sink, IObserver + class SingleAsyncImpl : Sink, IObserver { private readonly SingleAsync _parent; private TSource _value; private bool _seenValue; - public π(SingleAsync parent, IObserver observer, IDisposable cancel) + public SingleAsyncImpl(SingleAsync parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Skip.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Skip.cs index a092d99..7222816 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Skip.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Skip.cs @@ -5,7 +5,7 @@ using System; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Skip : Producer { @@ -27,7 +27,7 @@ namespace System.Reactive.Linq.Observαble _scheduler = scheduler; } - public IObservable Ω(int count) + public IObservable Omega(int count) { // // Sum semantics: @@ -39,7 +39,7 @@ namespace System.Reactive.Linq.Observαble return new Skip(_source, _count + count); } - public IObservable Ω(TimeSpan duration) + public IObservable Omega(TimeSpan duration) { // // Maximum semantics: @@ -66,7 +66,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new τ(this, observer, cancel); + var sink = new SkipImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -105,12 +105,12 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink, IObserver + class SkipImpl : Sink, IObserver { private readonly Skip _parent; private volatile bool _open; - public τ(Skip parent, IObserver observer, IDisposable cancel) + public SkipImpl(Skip parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipLast.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipLast.cs index 596f183..6bd771e 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipLast.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipLast.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; using System.Reactive.Concurrency; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class SkipLast : Producer { @@ -37,7 +37,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new τ(this, observer, cancel); + var sink = new SkipLastImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -75,12 +75,12 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink, IObserver + class SkipLastImpl : Sink, IObserver { private readonly SkipLast _parent; private Queue> _queue; - public τ(SkipLast parent, IObserver observer, IDisposable cancel) + public SkipLastImpl(SkipLast parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipUntil.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipUntil.cs index 8d4c7a9..8acce09 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipUntil.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipUntil.cs @@ -6,7 +6,7 @@ using System.Reactive.Concurrency; using System.Reactive.Disposables; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class SkipUntil : Producer { @@ -140,7 +140,7 @@ namespace System.Reactive.Linq.Observαble _scheduler = scheduler; } - public IObservable Ω(DateTimeOffset startTime) + public IObservable Omega(DateTimeOffset startTime) { // // Maximum semantics: diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipWhile.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipWhile.cs index e6e379d..b5694dc 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipWhile.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/SkipWhile.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class SkipWhile : Producer { @@ -33,7 +33,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new τ(this, observer, cancel); + var sink = new SkipWhileImpl(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -86,13 +86,13 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink, IObserver + class SkipWhileImpl : Sink, IObserver { private readonly SkipWhile _parent; private bool _running; private int _index; - public τ(SkipWhile parent, IObserver observer, IDisposable cancel) + public SkipWhileImpl(SkipWhile parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Sum.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Sum.cs index 6d51153..c5346f8 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Sum.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Sum.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class SumDouble : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Switch.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Switch.cs index 794b0d4..e27d6eb 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Switch.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Switch.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Switch : Producer { @@ -65,7 +65,7 @@ namespace System.Reactive.Linq.Observαble var d = new SingleAssignmentDisposable(); _innerSubscription.Disposable = d; - d.Disposable = value.SubscribeSafe(new ι(this, id, d)); + d.Disposable = value.SubscribeSafe(new Iter(this, id, d)); } public void OnError(Exception error) @@ -91,13 +91,13 @@ namespace System.Reactive.Linq.Observαble } } - class ι : IObserver + class Iter : IObserver { private readonly _ _parent; private readonly ulong _id; private readonly IDisposable _self; - public ι(_ parent, ulong id, IDisposable self) + public Iter(_ parent, ulong id, IDisposable self) { _parent = parent; _id = id; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Synchronize.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Synchronize.cs index 36985e9..ef4e885 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Synchronize.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Synchronize.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Synchronize : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Take.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Take.cs index 738e7c0..255e3d2 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Take.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Take.cs @@ -5,7 +5,7 @@ using System; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Take : Producer { @@ -27,7 +27,7 @@ namespace System.Reactive.Linq.Observαble _scheduler = scheduler; } - public IObservable Ω(int count) + public IObservable Omega(int count) { // // Minimum semantics: @@ -42,7 +42,7 @@ namespace System.Reactive.Linq.Observαble return new Take(_source, count); } - public IObservable Ω(TimeSpan duration) + public IObservable Omega(TimeSpan duration) { // // Minimum semantics: @@ -69,7 +69,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new τ(this, observer, cancel); + var sink = new TakeImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -115,11 +115,11 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink, IObserver + class TakeImpl : Sink, IObserver { private readonly Take _parent; - public τ(Take parent, IObserver observer, IDisposable cancel) + public TakeImpl(Take parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeLast.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeLast.cs index 98bf40e..441a502 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeLast.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeLast.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class TakeLast : Producer { @@ -41,7 +41,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new τ(this, observer, cancel); + var sink = new TakeLastImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -131,12 +131,12 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink, IObserver + class TakeLastImpl : Sink, IObserver { private readonly TakeLast _parent; private Queue> _queue; - public τ(TakeLast parent, IObserver observer, IDisposable cancel) + public TakeLastImpl(TakeLast parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeLastBuffer.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeLastBuffer.cs index 71b36b0..2a15825 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeLastBuffer.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeLastBuffer.cs @@ -7,7 +7,7 @@ using System.Linq; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class TakeLastBuffer : Producer> { @@ -39,7 +39,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new τ(this, observer, cancel); + var sink = new Impl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -82,12 +82,12 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink>, IObserver + class Impl : Sink>, IObserver { private readonly TakeLastBuffer _parent; private Queue> _queue; - public τ(TakeLastBuffer parent, IObserver> observer, IDisposable cancel) + public Impl(TakeLastBuffer parent, IObserver> observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeUntil.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeUntil.cs index eccc222..62b450a 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeUntil.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeUntil.cs @@ -6,7 +6,7 @@ using System.Reactive.Concurrency; using System.Reactive.Disposables; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class TakeUntil : Producer { @@ -173,7 +173,7 @@ namespace System.Reactive.Linq.Observαble _scheduler = scheduler; } - public IObservable Ω(DateTimeOffset endTime) + public IObservable Omega(DateTimeOffset endTime) { // // Minimum semantics: diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeWhile.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeWhile.cs index 30f63ca..dbf6117 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeWhile.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TakeWhile.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class TakeWhile : Producer { @@ -33,7 +33,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new τ(this, observer, cancel); + var sink = new TakeWhileImpl(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -91,13 +91,13 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink, IObserver + class TakeWhileImpl : Sink, IObserver { private readonly TakeWhile _parent; private bool _running; private int _index; - public τ(TakeWhile parent, IObserver observer, IDisposable cancel) + public TakeWhileImpl(TakeWhile parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Throttle.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Throttle.cs index 7b7ad86..5061114 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Throttle.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Throttle.cs @@ -5,7 +5,7 @@ using System; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Throttle : Producer { @@ -192,7 +192,7 @@ namespace System.Reactive.Linq.Observαble var d = new SingleAssignmentDisposable(); _cancelable.Disposable = d; - d.Disposable = throttle.SubscribeSafe(new δ(this, value, currentid, d)); + d.Disposable = throttle.SubscribeSafe(new Delta(this, value, currentid, d)); } public void OnError(Exception error) @@ -226,14 +226,14 @@ namespace System.Reactive.Linq.Observαble } } - class δ : IObserver + class Delta : IObserver { private readonly _ _parent; private readonly TSource _value; private readonly ulong _currentid; private readonly IDisposable _self; - public δ(_ parent, TSource value, ulong currentid, IDisposable self) + public Delta(_ parent, TSource value, ulong currentid, IDisposable self) { _parent = parent; _value = value; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Throw.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Throw.cs index 3b10894..9940a9d 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Throw.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Throw.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Concurrency; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Throw : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TimeInterval.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TimeInterval.cs index dacfa03..4c40863 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TimeInterval.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/TimeInterval.cs @@ -7,7 +7,7 @@ using System.Reactive.Concurrency; using System.Reactive.Disposables; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class TimeInterval : Producer> { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timeout.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timeout.cs index 4896294..94b78a6 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timeout.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timeout.cs @@ -5,7 +5,7 @@ using System; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Timeout : Producer { @@ -35,23 +35,23 @@ namespace System.Reactive.Linq.Observαble { if (_dueTimeA.HasValue) { - var sink = new α(this, observer, cancel); + var sink = new TimeA(this, observer, cancel); setSink(sink); return sink.Run(); } else { - var sink = new ρ(this, observer, cancel); + var sink = new TimeR(this, observer, cancel); setSink(sink); return sink.Run(); } } - class α : Sink, IObserver + class TimeA : Sink, IObserver { private readonly Timeout _parent; - public α(Timeout parent, IObserver observer, IDisposable cancel) + public TimeA(Timeout parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -136,11 +136,11 @@ namespace System.Reactive.Linq.Observαble } } - class ρ : Sink, IObserver + class TimeR : Sink, IObserver { private readonly Timeout _parent; - public ρ(Timeout parent, IObserver observer, IDisposable cancel) + public TimeR(Timeout parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -358,16 +358,16 @@ namespace System.Reactive.Linq.Observαble var d = new SingleAssignmentDisposable(); _timer.Disposable = d; - d.Disposable = timeout.SubscribeSafe(new τ(this, myid, d)); + d.Disposable = timeout.SubscribeSafe(new TimeoutImpl(this, myid, d)); } - class τ : IObserver + class TimeoutImpl : IObserver { private readonly _ _parent; private readonly ulong _id; private readonly IDisposable _self; - public τ(_ parent, ulong id, IDisposable self) + public TimeoutImpl(_ parent, ulong id, IDisposable self) { _parent = parent; _id = id; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timer.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timer.cs index 22ee0df..14df757 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timer.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timer.cs @@ -7,7 +7,7 @@ using System.Reactive.Concurrency; using System.Reactive.Disposables; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Timer : Producer { @@ -34,7 +34,7 @@ namespace System.Reactive.Linq.Observαble { if (_period.HasValue) { - var sink = new π(this, observer, cancel); + var sink = new TimerImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -76,12 +76,12 @@ namespace System.Reactive.Linq.Observαble } } - class π : Sink + class TimerImpl : Sink { private readonly Timer _parent; private readonly TimeSpan _period; - public π(Timer parent, IObserver observer, IDisposable cancel) + public TimerImpl(Timer parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timestamp.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timestamp.cs index ed54678..19bf1be 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timestamp.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Timestamp.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Concurrency; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Timestamp : Producer> { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToArray.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToArray.cs index ba039ae..97b9bd4 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToArray.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToArray.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class ToArray : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToDictionary.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToDictionary.cs index 919c1a1..5cfd9ec 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToDictionary.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToDictionary.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class ToDictionary : Producer> { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToList.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToList.cs index 34956d4..a265098 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToList.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToList.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class ToList : Producer> { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToLookup.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToLookup.cs index 55ff7d3..d86f5ee 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToLookup.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToLookup.cs @@ -5,7 +5,7 @@ using System; using System.Collections.Generic; using System.Linq; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class ToLookup : Producer> { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToObservable.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToObservable.cs index 795d54d..8de8ff7 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToObservable.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/ToObservable.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; using System.Reactive.Concurrency; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class ToObservable : Producer { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Using.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Using.cs index 996ee0e..680d1f4 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Using.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Using.cs @@ -4,7 +4,7 @@ using System; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Using : Producer where TResource : IDisposable diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Where.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Where.cs index a8eaa92..3ab5f73 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Where.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Where.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Where : Producer { @@ -23,7 +23,7 @@ namespace System.Reactive.Linq.Observαble _predicateI = predicate; } - public IObservable Ω(Func predicate) + public IObservable Omega(Func predicate) { if (_predicate != null) return new Where(_source, x => _predicate(x) && predicate(x)); @@ -41,7 +41,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new τ(this, observer, cancel); + var sink = new WhereImpl(this, observer, cancel); setSink(sink); return _source.SubscribeSafe(sink); } @@ -88,12 +88,12 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink, IObserver + class WhereImpl : Sink, IObserver { private readonly Where _parent; private int _index; - public τ(Where parent, IObserver observer, IDisposable cancel) + public WhereImpl(Where parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/While.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/While.cs index 178e4c8..2f24adf 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/While.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/While.cs @@ -4,7 +4,7 @@ using System; using System.Collections.Generic; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class While : Producer, IConcatenatable { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Window.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Window.cs index 47059c7..4dad064 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Window.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Window.cs @@ -9,7 +9,7 @@ using System.Reactive.Disposables; using System.Reactive.Subjects; using System.Threading; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { class Window : Producer> { @@ -54,7 +54,7 @@ namespace System.Reactive.Linq.Observαble } else if (_count > 0) { - var sink = new μ(this, observer, cancel); + var sink = new BoundedWindowImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -62,13 +62,13 @@ namespace System.Reactive.Linq.Observαble { if (_timeSpan == _timeShift) { - var sink = new π(this, observer, cancel); + var sink = new TimeShiftImpl(this, observer, cancel); setSink(sink); return sink.Run(); } else { - var sink = new τ(this, observer, cancel); + var sink = new WindowImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -151,11 +151,11 @@ namespace System.Reactive.Linq.Observαble } } - class τ : Sink>, IObserver + class WindowImpl : Sink>, IObserver { private readonly Window _parent; - public τ(Window parent, IObserver> observer, IDisposable cancel) + public WindowImpl(Window parent, IObserver> observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -296,11 +296,11 @@ namespace System.Reactive.Linq.Observαble } } - class π : Sink>, IObserver + class TimeShiftImpl : Sink>, IObserver { private readonly Window _parent; - public π(Window parent, IObserver> observer, IDisposable cancel) + public TimeShiftImpl(Window parent, IObserver> observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -371,11 +371,11 @@ namespace System.Reactive.Linq.Observαble } } - class μ : Sink>, IObserver + class BoundedWindowImpl : Sink>, IObserver { private readonly Window _parent; - public μ(Window parent, IObserver> observer, IDisposable cancel) + public BoundedWindowImpl(Window parent, IObserver> observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -516,7 +516,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new β(this, observer, cancel); + var sink = new Beta(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -578,7 +578,7 @@ namespace System.Reactive.Linq.Observαble var closingSubscription = new SingleAssignmentDisposable(); _m.Disposable = closingSubscription; - closingSubscription.Disposable = windowClose.SubscribeSafe(new ω(this, closingSubscription)); + closingSubscription.Disposable = windowClose.SubscribeSafe(new Omega(this, closingSubscription)); } private void CloseWindow(IDisposable closingSubscription) @@ -597,12 +597,12 @@ namespace System.Reactive.Linq.Observαble _windowGate.Wait(CreateWindowClose); } - class ω : IObserver + class Omega : IObserver { private readonly _ _parent; private readonly IDisposable _self; - public ω(_ parent, IDisposable self) + public Omega(_ parent, IDisposable self) { _parent = parent; _self = self; @@ -653,11 +653,11 @@ namespace System.Reactive.Linq.Observαble } } - class β : Sink>, IObserver + class Beta : Sink>, IObserver { private readonly Window _parent; - public β(Window parent, IObserver> observer, IDisposable cancel) + public Beta(Window parent, IObserver> observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; @@ -680,16 +680,16 @@ namespace System.Reactive.Linq.Observαble base._observer.OnNext(window); d.Add(_parent._source.SubscribeSafe(this)); - d.Add(_parent._windowBoundaries.SubscribeSafe(new ω(this))); + d.Add(_parent._windowBoundaries.SubscribeSafe(new Omega(this))); return _refCountDisposable; } - class ω : IObserver + class Omega : IObserver { - private readonly β _parent; + private readonly Beta _parent; - public ω(β parent) + public Omega(Beta parent) { _parent = parent; } diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Zip.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Zip.cs index bde6e29..77434c7 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Zip.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/Zip.cs @@ -7,7 +7,7 @@ using System.Collections.Generic; using System.Linq; using System.Reactive.Disposables; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { #region Binary @@ -42,7 +42,7 @@ namespace System.Reactive.Linq.Observαble } else { - var sink = new ε(this, observer, cancel); + var sink = new ZipImpl(this, observer, cancel); setSink(sink); return sink.Run(); } @@ -258,11 +258,11 @@ namespace System.Reactive.Linq.Observαble } } - class ε : Sink, IObserver + class ZipImpl : Sink, IObserver { private readonly Zip _parent; - public ε(Zip parent, IObserver observer, IDisposable cancel) + public ZipImpl(Zip parent, IObserver observer, IDisposable cancel) : base(observer, cancel) { _parent = parent; diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/_.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/_.cs index d4b0dbc..4489003 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/_.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/Observable/_.cs @@ -3,7 +3,7 @@ #if !NO_PERF using System; -namespace System.Reactive.Linq.Observαble +namespace System.Reactive.Linq.ObservableImpl { } #endif diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Aggregates.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Aggregates.cs index 739fc2d..8967297 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Aggregates.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Aggregates.cs @@ -7,7 +7,7 @@ using System.Reactive.Disposables; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif internal partial class QueryLanguage diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Binding.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Binding.cs index d9a96ba..8066a0e 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Binding.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Binding.cs @@ -6,7 +6,7 @@ using System.Reactive.Subjects; namespace System.Reactive.Linq { - using Observαble; + using ObservableImpl; internal partial class QueryLanguage { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Blocking.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Blocking.cs index 2b37006..5f69873 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Blocking.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Blocking.cs @@ -12,7 +12,7 @@ using System.Reactive.Threading; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif internal partial class QueryLanguage @@ -195,7 +195,7 @@ namespace System.Reactive.Linq { #if !NO_PERF var evt = new ManualResetEvent(false); - var sink = new ForEach.τ(onNext, () => evt.Set()); + var sink = new ForEach.ForEachImpl(onNext, () => evt.Set()); using (source.SubscribeSafe(sink)) { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Concurrency.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Concurrency.cs index 58408b2..0dc4035 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Concurrency.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Concurrency.cs @@ -7,7 +7,7 @@ using System.Threading; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif internal partial class QueryLanguage diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Conversions.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Conversions.cs index 44d6cf6..d795b4d 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Conversions.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Conversions.cs @@ -7,7 +7,7 @@ using System.Reactive.Disposables; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif internal partial class QueryLanguage diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Creation.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Creation.cs index 4aa25b2..55bae61 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Creation.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Creation.cs @@ -14,7 +14,7 @@ using System.Threading.Tasks; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif internal partial class QueryLanguage diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Events.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Events.cs index 3b9f2bf..453bcee 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Events.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Events.cs @@ -13,7 +13,7 @@ using System.Runtime.InteropServices.WindowsRuntime; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif // @@ -57,7 +57,7 @@ namespace System.Reactive.Linq private static IObservable> FromEventPattern_(Action addHandler, Action removeHandler, IScheduler scheduler) { #if !NO_PERF - return new FromEventPattern.τ(e => new EventHandler(e), addHandler, removeHandler, scheduler); + return new FromEventPattern.Impl(e => new EventHandler(e), addHandler, removeHandler, scheduler); #else var res = Observable.FromEventPattern(e => new EventHandler(e), addHandler, removeHandler); return SynchronizeEvents(res, scheduler); @@ -67,7 +67,7 @@ namespace System.Reactive.Linq private static IObservable> FromEventPattern_(Action addHandler, Action removeHandler, IScheduler scheduler) { #if !NO_PERF - return new FromEventPattern.τ(e => new EventHandler(e), addHandler, removeHandler, scheduler); + return new FromEventPattern.Impl(e => new EventHandler(e), addHandler, removeHandler, scheduler); #else var res = Observable.FromEventPattern(e => new EventHandler(e), addHandler, removeHandler); return SynchronizeEvents(res, scheduler); @@ -108,7 +108,7 @@ namespace System.Reactive.Linq #endif { #if !NO_PERF - return new FromEventPattern.τ(addHandler, removeHandler, scheduler); + return new FromEventPattern.Impl(addHandler, removeHandler, scheduler); #else var res = new AnonymousObservable>(observer => { @@ -151,7 +151,7 @@ namespace System.Reactive.Linq #endif { #if !NO_PERF - return new FromEventPattern.τ(conversion, addHandler, removeHandler, scheduler); + return new FromEventPattern.Impl(conversion, addHandler, removeHandler, scheduler); #else var res = new AnonymousObservable>(observer => { @@ -193,7 +193,7 @@ namespace System.Reactive.Linq #endif { #if !NO_PERF - return new FromEventPattern.τ(addHandler, removeHandler, scheduler); + return new FromEventPattern.Impl(addHandler, removeHandler, scheduler); #else var res = new AnonymousObservable>(observer => { @@ -240,7 +240,7 @@ namespace System.Reactive.Linq #endif { #if !NO_PERF - return new FromEventPattern.τ, TEventArgs>(handler => handler, addHandler, removeHandler, scheduler); + return new FromEventPattern.Impl, TEventArgs>(handler => handler, addHandler, removeHandler, scheduler); #else var res = Observable.FromEventPattern, TEventArgs>(handler => handler, addHandler, removeHandler); return SynchronizeEvents(res, scheduler); @@ -480,7 +480,7 @@ namespace System.Reactive.Linq if (isWinRT) { #if !NO_PERF - return new FromEventPattern.ρ(target, delegateType, addMethod, removeMethod, getResult, true, scheduler); + return new FromEventPattern.Handler(target, delegateType, addMethod, removeMethod, getResult, true, scheduler); #else return new AnonymousObservable(observer => { @@ -494,7 +494,7 @@ namespace System.Reactive.Linq #endif #if !NO_PERF - return new FromEventPattern.ρ(target, delegateType, addMethod, removeMethod, getResult, false, scheduler); + return new FromEventPattern.Handler(target, delegateType, addMethod, removeMethod, getResult, false, scheduler); #else var res = new AnonymousObservable(observer => { diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Imperative.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Imperative.cs index 75b86b3..1825035 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Imperative.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Imperative.cs @@ -13,7 +13,7 @@ using System.Threading.Tasks; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif internal partial class QueryLanguage diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Multiple.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Multiple.cs index 7308740..c726e82 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Multiple.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Multiple.cs @@ -16,7 +16,7 @@ using System.Threading.Tasks; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif internal partial class QueryLanguage diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Single.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Single.cs index 5f64e16..2770ade 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Single.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Single.cs @@ -9,7 +9,7 @@ using System.Reactive.Subjects; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif internal partial class QueryLanguage @@ -21,7 +21,7 @@ namespace System.Reactive.Linq #if !NO_PERF var asObservable = source as AsObservable; if (asObservable != null) - return asObservable.Ω(); + return asObservable.Omega(); return new AsObservable(source); #else @@ -331,7 +331,7 @@ namespace System.Reactive.Linq #if !NO_PERF var ignoreElements = source as IgnoreElements; if (ignoreElements != null) - return ignoreElements.Ω(); + return ignoreElements.Omega(); return new IgnoreElements(source); #else diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.StandardSequenceOperators.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.StandardSequenceOperators.cs index 0089f04..41ceb9c 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.StandardSequenceOperators.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.StandardSequenceOperators.cs @@ -1,13 +1,10 @@ // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. using System.Collections.Generic; -using System.Linq; using System.Reactive.Concurrency; -using System.Reactive.Disposables; -using System.Reactive.Subjects; + #if !NO_TPL -using System.Reactive.Threading.Tasks; using System.Threading; using System.Threading.Tasks; #endif @@ -15,7 +12,7 @@ using System.Threading.Tasks; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif internal partial class QueryLanguage @@ -156,30 +153,50 @@ namespace System.Reactive.Linq public virtual IObservable> GroupBy(IObservable source, Func keySelector, Func elementSelector) { - return GroupBy_(source, keySelector, elementSelector, EqualityComparer.Default); + return GroupBy_(source, keySelector, elementSelector, null, EqualityComparer.Default); } public virtual IObservable> GroupBy(IObservable source, Func keySelector, IEqualityComparer comparer) { - return GroupBy_(source, keySelector, x => x, comparer); + return GroupBy_(source, keySelector, x => x, null, comparer); } public virtual IObservable> GroupBy(IObservable source, Func keySelector) { - return GroupBy_(source, keySelector, x => x, EqualityComparer.Default); + return GroupBy_(source, keySelector, x => x, null, EqualityComparer.Default); } public virtual IObservable> GroupBy(IObservable source, Func keySelector, Func elementSelector, IEqualityComparer comparer) { - return GroupBy_(source, keySelector, elementSelector, comparer); + return GroupBy_(source, keySelector, elementSelector, null, comparer); + } + + public virtual IObservable> GroupBy(IObservable source, Func keySelector, Func elementSelector, int capacity) + { + return GroupBy_(source, keySelector, elementSelector, capacity, EqualityComparer.Default); + } + + public virtual IObservable> GroupBy(IObservable source, Func keySelector, int capacity, IEqualityComparer comparer) + { + return GroupBy_(source, keySelector, x => x, capacity, comparer); + } + + public virtual IObservable> GroupBy(IObservable source, Func keySelector, int capacity) + { + return GroupBy_(source, keySelector, x => x, capacity, EqualityComparer.Default); + } + + public virtual IObservable> GroupBy(IObservable source, Func keySelector, Func elementSelector, int capacity, IEqualityComparer comparer) + { + return GroupBy_(source, keySelector, elementSelector, capacity, comparer); } - private static IObservable> GroupBy_(IObservable source, Func keySelector, Func elementSelector, IEqualityComparer comparer) + private static IObservable> GroupBy_(IObservable source, Func keySelector, Func elementSelector, int? capacity, IEqualityComparer comparer) { #if !NO_PERF - return new GroupBy(source, keySelector, elementSelector, comparer); + return new GroupBy(source, keySelector, elementSelector, capacity, comparer); #else - return GroupByUntil_(source, keySelector, elementSelector, _ => Observable.Never(), comparer); + return GroupByUntil_(source, keySelector, elementSelector, _ => Observable.Never(), capacity, comparer); #endif } @@ -189,32 +206,54 @@ namespace System.Reactive.Linq public virtual IObservable> GroupByUntil(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, IEqualityComparer comparer) { - return GroupByUntil_(source, keySelector, elementSelector, durationSelector, comparer); + return GroupByUntil_(source, keySelector, elementSelector, durationSelector, null, comparer); } public virtual IObservable> GroupByUntil(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector) { - return GroupByUntil_(source, keySelector, elementSelector, durationSelector, EqualityComparer.Default); + return GroupByUntil_(source, keySelector, elementSelector, durationSelector, null, EqualityComparer.Default); } public virtual IObservable> GroupByUntil(IObservable source, Func keySelector, Func, IObservable> durationSelector, IEqualityComparer comparer) { - return GroupByUntil_(source, keySelector, x => x, durationSelector, comparer); + return GroupByUntil_(source, keySelector, x => x, durationSelector, null, comparer); } public virtual IObservable> GroupByUntil(IObservable source, Func keySelector, Func, IObservable> durationSelector) { - return GroupByUntil_(source, keySelector, x => x, durationSelector, EqualityComparer.Default); + return GroupByUntil_(source, keySelector, x => x, durationSelector, null, EqualityComparer.Default); + } + + public virtual IObservable> GroupByUntil(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, int capacity, IEqualityComparer comparer) + { + return GroupByUntil_(source, keySelector, elementSelector, durationSelector, capacity, comparer); } - private static IObservable> GroupByUntil_(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, IEqualityComparer comparer) + public virtual IObservable> GroupByUntil(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, int capacity) + { + return GroupByUntil_(source, keySelector, elementSelector, durationSelector, capacity, EqualityComparer.Default); + } + + public virtual IObservable> GroupByUntil(IObservable source, Func keySelector, Func, IObservable> durationSelector, int capacity, IEqualityComparer comparer) + { + return GroupByUntil_(source, keySelector, x => x, durationSelector, capacity, comparer); + } + + public virtual IObservable> GroupByUntil(IObservable source, Func keySelector, Func, IObservable> durationSelector, int capacity) + { + return GroupByUntil_(source, keySelector, x => x, durationSelector, capacity, EqualityComparer.Default); + } + + private static IObservable> GroupByUntil_(IObservable source, Func keySelector, Func elementSelector, Func, IObservable> durationSelector, int? capacity, IEqualityComparer comparer) { #if !NO_PERF - return new GroupByUntil(source, keySelector, elementSelector, durationSelector, comparer); + return new GroupByUntil(source, keySelector, elementSelector, durationSelector, capacity, comparer); #else return new AnonymousObservable>(observer => { - var map = new Dictionary>(comparer); + var map = capacity.HasValue + ? new Dictionary>(capacity.Value, comparer) + : new Dictionary>(comparer); var groupDisposable = new CompositeDisposable(); var refCountDisposable = new RefCountDisposable(groupDisposable); @@ -733,7 +772,7 @@ namespace System.Reactive.Linq #if !NO_PERF var select = source as Select; if (select != null) - return select.Ω(selector); + return select.Omega(selector); return new Select(source, selector); #else @@ -853,12 +892,30 @@ namespace System.Reactive.Linq #endif } + public virtual IObservable SelectMany(IObservable source, Func> selector) + { +#if !NO_PERF + return new SelectMany(source, (x, i, token) => selector(x, i)); +#else + return SelectMany_(source, (x, i) => selector(x, i).ToObservable()); +#endif + } + public virtual IObservable SelectMany(IObservable source, Func> selector) { #if !NO_PERF return new SelectMany(source, selector); #else return SelectMany_(source, x => FromAsync(ct => selector(x, ct))); +#endif + } + + public virtual IObservable SelectMany(IObservable source, Func> selector) + { +#if !NO_PERF + return new SelectMany(source, selector); +#else + return SelectMany_(source, (x, i) => FromAsync(ct => selector(x, i, ct))); #endif } #endif @@ -883,12 +940,30 @@ namespace System.Reactive.Linq #endif } + public virtual IObservable SelectMany(IObservable source, Func> taskSelector, Func resultSelector) + { +#if !NO_PERF + return new SelectMany(source, (x, i, token) => taskSelector(x, i), resultSelector); +#else + return SelectMany_(source, (x, i) => taskSelector(x, i).ToObservable(), (x, i, t, _) => resultSelector(x, i, t)); +#endif + } + public virtual IObservable SelectMany(IObservable source, Func> taskSelector, Func resultSelector) { #if !NO_PERF return new SelectMany(source, taskSelector, resultSelector); #else return SelectMany_(source, x => FromAsync(ct => taskSelector(x, ct)), resultSelector); +#endif + } + + public virtual IObservable SelectMany(IObservable source, Func> taskSelector, Func resultSelector) + { +#if !NO_PERF + return new SelectMany(source, taskSelector, resultSelector); +#else + return SelectMany_(source, (x, i) => FromAsync(ct => taskSelector(x, i, ct)), (x, i, t, _) => resultSelector(x, i, t)); #endif } #endif @@ -901,7 +976,7 @@ namespace System.Reactive.Linq return source.Select(selector).Merge(); #endif } - + private static IObservable SelectMany_(IObservable source, Func> selector) { #if !NO_PERF @@ -925,7 +1000,7 @@ namespace System.Reactive.Linq #if !NO_PERF return new SelectMany(source, collectionSelector, resultSelector); #else - return SelectMany_(source, x => collectionSelector(x).Select(y => resultSelector(x, y))); + return SelectMany_(source, (x, i) => collectionSelector(x, i).Select((y, i2) => resultSelector(x, i, y, i2))); #endif } @@ -946,19 +1021,23 @@ namespace System.Reactive.Linq #endif } - public virtual IObservable SelectMany(IObservable source, Func> onNext, Func> onError, Func> onCompleted) + public virtual IObservable SelectMany(IObservable source, Func> onNext, Func> onError, Func> onCompleted) { #if !NO_PERF return new SelectMany(source, onNext, onError, onCompleted); #else - return source.Materialize().SelectMany(notification => + return Defer(() => { - if (notification.Kind == NotificationKind.OnNext) - return onNext(notification.Value); - else if (notification.Kind == NotificationKind.OnError) - return onError(notification.Exception); - else - return onCompleted(); + var index = 0; + return source.Materialize().SelectMany(notification => + { + if (notification.Kind == NotificationKind.OnNext) + return onNext(notification.Value, checked(index++)); + else if (notification.Kind == NotificationKind.OnError) + return onError(notification.Exception); + else + return onCompleted(); + }); }); #endif } @@ -977,7 +1056,7 @@ namespace System.Reactive.Linq #if !NO_PERF return new SelectMany(source, selector); #else - return SelectMany_(source, selector, (_, x) => x); + return SelectMany_(source, selector, (_, __, x, ___) => x); #endif } @@ -986,6 +1065,11 @@ namespace System.Reactive.Linq return SelectMany_(source, collectionSelector, resultSelector); } + public virtual IObservable SelectMany(IObservable source, Func> collectionSelector, Func resultSelector) + { + return SelectMany_(source, collectionSelector, resultSelector); + } + private static IObservable SelectMany_(IObservable source, Func> collectionSelector, Func resultSelector) { #if !NO_PERF @@ -1045,9 +1129,67 @@ namespace System.Reactive.Linq #endif } - public virtual IObservable SelectMany(IObservable source, Func> collectionSelector, Func resultSelector) + private static IObservable SelectMany_(IObservable source, Func> collectionSelector, Func resultSelector) { +#if !NO_PERF return new SelectMany(source, collectionSelector, resultSelector); +#else + return new AnonymousObservable(observer => + { + var index = 0; + + return source.Subscribe( + x => + { + var xs = default(IEnumerable); + try + { + xs = collectionSelector(x, checked(index++)); + } + catch (Exception exception) + { + observer.OnError(exception); + return; + } + + var e = xs.GetEnumerator(); + + try + { + var eIndex = 0; + var hasNext = true; + while (hasNext) + { + hasNext = false; + var current = default(TResult); + + try + { + hasNext = e.MoveNext(); + if (hasNext) + current = resultSelector(x, index, e.Current, checked(eIndex++)); + } + catch (Exception exception) + { + observer.OnError(exception); + return; + } + + if (hasNext) + observer.OnNext(current); + } + } + finally + { + if (e != null) + e.Dispose(); + } + }, + observer.OnError, + observer.OnCompleted + ) + }); +#endif } #endregion @@ -1059,7 +1201,7 @@ namespace System.Reactive.Linq #if !NO_PERF var skip = source as Skip; if (skip != null && skip._scheduler == null) - return skip.Ω(count); + return skip.Omega(count); return new Skip(source, count); #else @@ -1156,7 +1298,7 @@ namespace System.Reactive.Linq { var take = source as Take; if (take != null && take._scheduler == null) - return take.Ω(count); + return take.Omega(count); return new Take(source, count); } @@ -1248,7 +1390,7 @@ namespace System.Reactive.Linq #if !NO_PERF var where = source as Where; if (where != null) - return where.Ω(predicate); + return where.Omega(predicate); return new Where(source, predicate); #else diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Time.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Time.cs index 161e1c1..f495177 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Time.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Linq/QueryLanguage.Time.cs @@ -8,7 +8,7 @@ using System.Reactive.Subjects; namespace System.Reactive.Linq { #if !NO_PERF - using Observαble; + using ObservableImpl; #endif internal partial class QueryLanguage @@ -612,7 +612,7 @@ namespace System.Reactive.Linq #if !NO_PERF var skip = source as Skip; if (skip != null && skip._scheduler == scheduler) - return skip.Ω(duration); + return skip.Omega(duration); return new Skip(source, duration, scheduler); #else @@ -703,7 +703,7 @@ namespace System.Reactive.Linq #if !NO_PERF var skipUntil = source as SkipUntil; if (skipUntil != null && skipUntil._scheduler == scheduler) - return skipUntil.Ω(startTime); + return skipUntil.Omega(startTime); return new SkipUntil(source, startTime, scheduler); #else @@ -747,7 +747,7 @@ namespace System.Reactive.Linq #if !NO_PERF var take = source as Take; if (take != null && take._scheduler == scheduler) - return take.Ω(duration); + return take.Omega(duration); return new Take(source, duration, scheduler); #else @@ -914,7 +914,7 @@ namespace System.Reactive.Linq #if !NO_PERF var takeUntil = source as TakeUntil; if (takeUntil != null && takeUntil._scheduler == scheduler) - return takeUntil.Ω(endTime); + return takeUntil.Omega(endTime); return new TakeUntil(source, endTime, scheduler); #else diff --git a/Rx/NET/Source/System.Reactive.Linq/Reactive/Subjects/BehaviorSubject.cs b/Rx/NET/Source/System.Reactive.Linq/Reactive/Subjects/BehaviorSubject.cs index daf23eb..211ad09 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Reactive/Subjects/BehaviorSubject.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Reactive/Subjects/BehaviorSubject.cs @@ -11,6 +11,38 @@ namespace System.Reactive.Subjects /// The type of the elements processed by the subject. public sealed class BehaviorSubject : ISubject, IDisposable { + /// + /// Gets the current value or throws an exception. + /// + /// The initial value passed to the constructor until is called; after which, the last value passed to . + /// + /// is frozen after is called. + /// After is called, always throws the specified exception. + /// An exception is always thrown after is called. + /// + /// Reading is a thread-safe operation, though there's a potential race condition when or are being invoked concurrently. + /// In some cases, it may be necessary for a caller to use external synchronization to avoid race conditions. + /// + /// + /// Dispose was called. + public T Value + { + get + { + lock (_gate) + { + CheckDisposed(); + + if (_exception != null) + { + throw _exception; + } + + return _value; + } + } + } + private readonly object _gate = new object(); private ImmutableList> _observers; diff --git a/Rx/NET/Source/System.Reactive.Linq/Strings_Linq.Generated.cs b/Rx/NET/Source/System.Reactive.Linq/Strings_Linq.Generated.cs index 79f2dfb..3c9c6eb 100644 --- a/Rx/NET/Source/System.Reactive.Linq/Strings_Linq.Generated.cs +++ b/Rx/NET/Source/System.Reactive.Linq/Strings_Linq.Generated.cs @@ -53,7 +53,7 @@ namespace System.Reactive { if (object.ReferenceEquals(resourceMan, null)) { -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("System.Reactive.Strings_Linq", typeof(Strings_Linq).GetTypeInfo().Assembly); #else global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("System.Reactive.Strings_Linq", typeof(Strings_Linq).Assembly); diff --git a/Rx/NET/Source/System.Reactive.Linq/System.Reactive.Linq.csproj b/Rx/NET/Source/System.Reactive.Linq/System.Reactive.Linq.csproj index 236393e..022ff0b 100644 --- a/Rx/NET/Source/System.Reactive.Linq/System.Reactive.Linq.csproj +++ b/Rx/NET/Source/System.Reactive.Linq/System.Reactive.Linq.csproj @@ -12,6 +12,7 @@ 512 true ..\Rx.ruleset + ..\ bin\ReleaseXBLV\ @@ -217,4 +218,5 @@ + \ No newline at end of file diff --git a/Rx/NET/Source/System.Reactive.Observable.Aliases/Observable.Aliases.cs b/Rx/NET/Source/System.Reactive.Observable.Aliases/Observable.Aliases.cs new file mode 100644 index 0000000..8bacad8 --- /dev/null +++ b/Rx/NET/Source/System.Reactive.Observable.Aliases/Observable.Aliases.cs @@ -0,0 +1,422 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. + +#pragma warning disable 1591 + +using System.Collections.Generic; +using System.Reactive.Concurrency; +using System.Reactive.Linq; +using System.Reactive; + +#if !NO_TPL +using System.Reactive.Threading.Tasks; // needed for doc comments +using System.Threading; +using System.Threading.Tasks; +#endif + +/* + * Note: these methods just call methods in Observable.StandardSequenceOperators.cs + * in order to create the following method aliases: + * + * Map = Select + * FlatMap = SelectMany + * Filter = Where + * + */ + +namespace System.Reactive.Observable.Aliases +{ + public static class QueryLanguage + { + #region + Map + + + /// + /// Projects each element of an observable sequence into a new form. Synonym for the method 'Select' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the result sequence, obtained by running the selector function for each element in the source sequence. + /// A sequence of elements to invoke a transform function on. + /// A transform function to apply to each source element. + /// An observable sequence whose elements are the result of invoking the transform function on each element of source. + /// or is null. + public static IObservable Map(this IObservable source, Func selector) + { + return source.Select(selector); + } + + /// + /// Projects each element of an observable sequence into a new form by incorporating the element's index. Synonym for the method 'Select' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the result sequence, obtained by running the selector function for each element in the source sequence. + /// A sequence of elements to invoke a transform function on. + /// A transform function to apply to each source element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of invoking the transform function on each element of source. + /// or is null. + public static IObservable Map(this IObservable source, Func selector) + { + return source.Select(selector); + } + + #endregion + + #region + FlatMap + + + /// + /// Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the other sequence and the elements in the result sequence. + /// An observable sequence of elements to project. + /// An observable sequence to project each element from the source sequence onto. + /// An observable sequence whose elements are the result of projecting each source element onto the other sequence and merging all the resulting sequences together. + /// or is null. + public static IObservable FlatMap(this IObservable source, IObservable other) + { + return source.SelectMany(other); + } + + /// + /// Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// or is null. + public static IObservable FlatMap(this IObservable source, Func> selector) + { + return source.SelectMany(selector); + } + + /// + /// Projects each element of an observable sequence to an observable sequence by incorporating the element's index and merges the resulting observable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// or is null. + public static IObservable FlatMap(this IObservable source, Func> selector) + { + return source.SelectMany(selector); + } + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task and merges all of the task results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + /// or is null. + public static IObservable FlatMap(this IObservable source, Func> selector) + { + return source.SelectMany(selector); + } + + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index and merges all of the task results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + /// or is null. + public static IObservable FlatMap(this IObservable source, Func> selector) + { + return source.SelectMany(selector); + } + + /// + /// Projects each element of an observable sequence to a task with cancellation support and merges all of the task results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + /// or is null. + public static IObservable FlatMap(this IObservable source, Func> selector) + { + return source.SelectMany(selector); + } + + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index with cancellation support and merges all of the task results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + /// or is null. + public static IObservable FlatMap(this IObservable source, Func> selector) + { + return source.SelectMany(selector); + } +#endif + + /// + /// Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected intermediate sequences. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// A transform function to apply to each element of the intermediate sequence. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. + /// or or is null. + public static IObservable FlatMap(this IObservable source, Func> collectionSelector, Func resultSelector) + { + return source.SelectMany(collectionSelector, resultSelector); + } + + /// + /// Projects each element of an observable sequence to an observable sequence by incorporating the element's index, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected intermediate sequences. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element and the fourth parameter represents the index of the intermediate element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. + /// or or is null. + public static IObservable FlatMap(this IObservable source, Func> collectionSelector, Func resultSelector) + { + return source.SelectMany(collectionSelector, resultSelector); + } + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// A transform function to apply to each element of the intermediate sequence. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IObservable FlatMap(this IObservable source, Func> taskSelector, Func resultSelector) + { + return source.SelectMany(taskSelector, resultSelector); + } + + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IObservable FlatMap(this IObservable source, Func> taskSelector, Func resultSelector) + { + return source.SelectMany(taskSelector, resultSelector); + } + + /// + /// Projects each element of an observable sequence to a task with cancellation support, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// A transform function to apply to each element of the intermediate sequence. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IObservable FlatMap(this IObservable source, Func> taskSelector, Func resultSelector) + { + return source.SelectMany(taskSelector, resultSelector); + } + + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index with cancellation support, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IObservable FlatMap(this IObservable source, Func> taskSelector, Func resultSelector) + { + return source.SelectMany(taskSelector, resultSelector); + } +#endif + + /// + /// Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. + /// An observable sequence of notifications to project. + /// A transform function to apply to each element. + /// A transform function to apply when an error occurs in the source sequence. + /// A transform function to apply when the end of the source sequence is reached. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. + /// or or or is null. + public static IObservable FlatMap(this IObservable source, Func> onNext, Func> onError, Func> onCompleted) + { + return source.SelectMany(onNext, onError, onCompleted); + } + + /// + /// Projects each notification of an observable sequence to an observable sequence by incorporating the element's index and merges the resulting observable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. + /// An observable sequence of notifications to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply when an error occurs in the source sequence. + /// A transform function to apply when the end of the source sequence is reached. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. + /// or or or is null. + public static IObservable FlatMap(this IObservable source, Func> onNext, Func> onError, Func> onCompleted) + { + return source.SelectMany(onNext, onError, onCompleted); + } + + /// + /// Projects each element of an observable sequence to an enumerable sequence and concatenates the resulting enumerable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner enumerable sequences and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// or is null. + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IObservable FlatMap(this IObservable source, Func> selector) + { + return source.SelectMany(selector); + } + + /// + /// Projects each element of an observable sequence to an enumerable sequence by incorporating the element's index and concatenates the resulting enumerable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner enumerable sequences and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// or is null. + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IObservable FlatMap(this IObservable source, Func> selector) + { + return source.SelectMany(selector); + } + + /// + /// Projects each element of an observable sequence to an enumerable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected intermediate enumerable sequences. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// A transform function to apply to each element of the intermediate sequence. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. + /// or or is null. + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IObservable FlatMap(this IObservable source, Func> collectionSelector, Func resultSelector) + { + return source.SelectMany(collectionSelector, resultSelector); + } + + /// + /// Projects each element of an observable sequence to an enumerable sequence by incorporating the element's index, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected intermediate enumerable sequences. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element and the fourth parameter represents the index of the intermediate element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. + /// or or is null. + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IObservable FlatMap(this IObservable source, Func> collectionSelector, Func resultSelector) + { + return source.SelectMany(collectionSelector, resultSelector); + } + + #endregion + + #region + Filter + + + /// + /// Filters the elements of an observable sequence based on a predicate. + /// Synonym for the method 'Where' + /// + /// The type of the elements in the source sequence. + /// An observable sequence whose elements to filter. + /// A function to test each source element for a condition. + /// An observable sequence that contains elements from the input sequence that satisfy the condition. + /// or is null. + public static IObservable Filter(this IObservable source, Func predicate) + { + return source.Where(predicate); + } + + /// + /// Filters the elements of an observable sequence based on a predicate by incorporating the element's index. + /// Synonym for the method 'Where' + /// + /// The type of the elements in the source sequence. + /// An observable sequence whose elements to filter. + /// A function to test each source element for a conditio; the second parameter of the function represents the index of the source element. + /// An observable sequence that contains elements from the input sequence that satisfy the condition. + /// or is null. + public static IObservable Filter(this IObservable source, Func predicate) + { + return source.Where(predicate); + } + + #endregion + } + +} + +#pragma warning restore 1591 diff --git a/Rx/NET/Source/System.Reactive.Observable.Aliases/Qbservable.Aliases.Generated.cs b/Rx/NET/Source/System.Reactive.Observable.Aliases/Qbservable.Aliases.Generated.cs new file mode 100644 index 0000000..a73f0a3 --- /dev/null +++ b/Rx/NET/Source/System.Reactive.Observable.Aliases/Qbservable.Aliases.Generated.cs @@ -0,0 +1,449 @@ +/* + * WARNING: Auto-generated file (11/21/2013 11:07:25 AM) + * Run Rx's auto-homoiconizer tool to generate this file (in the HomoIcon directory). + */ + +#pragma warning disable 1591 + +#if !NO_EXPRESSIONS + +using System; +using System.Reactive.Concurrency; +using System.Collections.Generic; +using System.Reactive.Joins; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using System.Threading; +using System.Reactive; +using System.Reactive.Subjects; +#if !NO_TPL +using System.Threading.Tasks; +#endif +#if !NO_REMOTING +using System.Runtime.Remoting.Lifetime; +#endif + +namespace System.Reactive.Linq +{ + public static partial class QbservableAliases + { + /// + /// Filters the elements of an observable sequence based on a predicate. + /// Synonym for the method 'Where' + /// + /// The type of the elements in the source sequence. + /// An observable sequence whose elements to filter. + /// A function to test each source element for a condition. + /// An observable sequence that contains elements from the input sequence that satisfy the condition. + /// + /// or is null. + public static IQbservable Filter(this IQbservable source, Expression> predicate) + { + return Qbservable.Where(source, predicate); + } + + /// + /// Filters the elements of an observable sequence based on a predicate by incorporating the element's index. + /// Synonym for the method 'Where' + /// + /// The type of the elements in the source sequence. + /// An observable sequence whose elements to filter. + /// A function to test each source element for a conditio; the second parameter of the function represents the index of the source element. + /// An observable sequence that contains elements from the input sequence that satisfy the condition. + /// + /// or is null. + public static IQbservable Filter(this IQbservable source, Expression> predicate) + { + return Qbservable.Where(source, predicate); + } + + /// + /// Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected intermediate sequences. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// A transform function to apply to each element of the intermediate sequence. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. + /// + /// or or is null. + public static IQbservable FlatMap(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) + { + return Qbservable.SelectMany(source, collectionSelector, resultSelector); + } + + /// + /// Projects each element of an observable sequence to an observable sequence by incorporating the element's index, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected intermediate sequences. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element and the fourth parameter represents the index of the intermediate element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. + /// + /// or or is null. + public static IQbservable FlatMap(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) + { + return Qbservable.SelectMany(source, collectionSelector, resultSelector); + } + + /// + /// Projects each element of an observable sequence to an enumerable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected intermediate enumerable sequences. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// A transform function to apply to each element of the intermediate sequence. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. + /// + /// or or is null. + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IQbservable FlatMap(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) + { + return Qbservable.SelectMany(source, collectionSelector, resultSelector); + } + + /// + /// Projects each element of an observable sequence to an enumerable sequence by incorporating the element's index, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected intermediate enumerable sequences. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element and the fourth parameter represents the index of the intermediate element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. + /// + /// or or is null. + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IQbservable FlatMap(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) + { + return Qbservable.SelectMany(source, collectionSelector, resultSelector); + } + + /// + /// Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the other sequence and the elements in the result sequence. + /// An observable sequence of elements to project. + /// An observable sequence to project each element from the source sequence onto. + /// An observable sequence whose elements are the result of projecting each source element onto the other sequence and merging all the resulting sequences together. + /// + /// or is null. + public static IQbservable FlatMap(this IQbservable source, IObservable other) + { + return Qbservable.SelectMany(source, other); + } + + /// + /// Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. + /// An observable sequence of notifications to project. + /// A transform function to apply to each element. + /// A transform function to apply when an error occurs in the source sequence. + /// A transform function to apply when the end of the source sequence is reached. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. + /// + /// or or or is null. + public static IQbservable FlatMap(this IQbservable source, Expression>> onNext, Expression>> onError, Expression>> onCompleted) + { + return Qbservable.SelectMany(source, onNext, onError, onCompleted); + } + + /// + /// Projects each notification of an observable sequence to an observable sequence by incorporating the element's index and merges the resulting observable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. + /// An observable sequence of notifications to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply when an error occurs in the source sequence. + /// A transform function to apply when the end of the source sequence is reached. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. + /// + /// or or or is null. + public static IQbservable FlatMap(this IQbservable source, Expression>> onNext, Expression>> onError, Expression>> onCompleted) + { + return Qbservable.SelectMany(source, onNext, onError, onCompleted); + } + + /// + /// Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// + /// or is null. + public static IQbservable FlatMap(this IQbservable source, Expression>> selector) + { + return Qbservable.SelectMany(source, selector); + } + + /// + /// Projects each element of an observable sequence to an observable sequence by incorporating the element's index and merges the resulting observable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// + /// or is null. + public static IQbservable FlatMap(this IQbservable source, Expression>> selector) + { + return Qbservable.SelectMany(source, selector); + } + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task and merges all of the task results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + /// + /// or is null. + public static IQbservable FlatMap(this IQbservable source, Expression>> selector) + { + return Qbservable.SelectMany(source, selector); + } +#endif + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index and merges all of the task results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + /// + /// or is null. + public static IQbservable FlatMap(this IQbservable source, Expression>> selector) + { + return Qbservable.SelectMany(source, selector); + } +#endif + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task with cancellation support and merges all of the task results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + /// + /// or is null. + public static IQbservable FlatMap(this IQbservable source, Expression>> selector) + { + return Qbservable.SelectMany(source, selector); + } +#endif + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index with cancellation support and merges all of the task results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + /// + /// or is null. + public static IQbservable FlatMap(this IQbservable source, Expression>> selector) + { + return Qbservable.SelectMany(source, selector); + } +#endif + + /// + /// Projects each element of an observable sequence to an enumerable sequence and concatenates the resulting enumerable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner enumerable sequences and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// + /// or is null. + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IQbservable FlatMap(this IQbservable source, Expression>> selector) + { + return Qbservable.SelectMany(source, selector); + } + + /// + /// Projects each element of an observable sequence to an enumerable sequence by incorporating the element's index and concatenates the resulting enumerable sequences into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner enumerable sequences and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// + /// or is null. + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IQbservable FlatMap(this IQbservable source, Expression>> selector) + { + return Qbservable.SelectMany(source, selector); + } + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// A transform function to apply to each element of the intermediate sequence. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IQbservable FlatMap(this IQbservable source, Expression>> taskSelector, Expression> resultSelector) + { + return Qbservable.SelectMany(source, taskSelector, resultSelector); + } +#endif + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IQbservable FlatMap(this IQbservable source, Expression>> taskSelector, Expression> resultSelector) + { + return Qbservable.SelectMany(source, taskSelector, resultSelector); + } +#endif + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task with cancellation support, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// A transform function to apply to each element of the intermediate sequence. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IQbservable FlatMap(this IQbservable source, Expression>> taskSelector, Expression> resultSelector) + { + return Qbservable.SelectMany(source, taskSelector, resultSelector); + } +#endif + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index with cancellation support, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// Synonym for the method 'SelectMany' + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IQbservable FlatMap(this IQbservable source, Expression>> taskSelector, Expression> resultSelector) + { + return Qbservable.SelectMany(source, taskSelector, resultSelector); + } +#endif + + /// + /// Projects each element of an observable sequence into a new form. Synonym for the method 'Select' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the result sequence, obtained by running the selector function for each element in the source sequence. + /// A sequence of elements to invoke a transform function on. + /// A transform function to apply to each source element. + /// An observable sequence whose elements are the result of invoking the transform function on each element of source. + /// + /// or is null. + public static IQbservable Map(this IQbservable source, Expression> selector) + { + return Qbservable.Select(source, selector); + } + + /// + /// Projects each element of an observable sequence into a new form by incorporating the element's index. Synonym for the method 'Select' + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the result sequence, obtained by running the selector function for each element in the source sequence. + /// A sequence of elements to invoke a transform function on. + /// A transform function to apply to each source element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of invoking the transform function on each element of source. + /// + /// or is null. + public static IQbservable Map(this IQbservable source, Expression> selector) + { + return Qbservable.Select(source, selector); + } + + } +} + +#endif + +#pragma warning restore 1591 + diff --git a/Rx/NET/Source/System.Reactive.Observable.Aliases/System.Reactive.Observable.Aliases.csproj b/Rx/NET/Source/System.Reactive.Observable.Aliases/System.Reactive.Observable.Aliases.csproj new file mode 100644 index 0000000..52ef7a5 --- /dev/null +++ b/Rx/NET/Source/System.Reactive.Observable.Aliases/System.Reactive.Observable.Aliases.csproj @@ -0,0 +1,59 @@ + + + + + Debug + AnyCPU + {9FFAC385-10A4-4DDD-B800-DE67E8469CC0} + Library + Properties + System.Reactive.Observable.Aliases + System.Reactive.Observable.Aliases + v4.0 + 512 + false + + + + + + + $(OutputPath)\$(AssemblyName).XML + + + + + + + + + + + + + + + + + {4e516f10-da7a-4d43-963e-a93865abea5b} + System.Reactive.Core + + + {9e9b9c60-98b0-40fa-9c2b-1218d417caa4} + System.Reactive.Interfaces + + + {63252ae9-5186-45ca-bfcd-fa51c6b66a43} + System.Reactive.Linq + + + {c7b9d7be-f47f-466b-a6b0-e46f1069b171} + System.Reactive.Providers + + + + + + + + \ No newline at end of file diff --git a/Rx/NET/Source/System.Reactive.PlatformServices/Properties/AssemblyInfo.cs b/Rx/NET/Source/System.Reactive.PlatformServices/Properties/AssemblyInfo.cs index 4d3ccea..2e97541 100644 --- a/Rx/NET/Source/System.Reactive.PlatformServices/Properties/AssemblyInfo.cs +++ b/Rx/NET/Source/System.Reactive.PlatformServices/Properties/AssemblyInfo.cs @@ -27,11 +27,11 @@ using System.Security; [assembly: AllowPartiallyTrustedCallers] #endif -#if XBOX_LAKEVIEW -[assembly: SecurityTransparent] -#endif +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== -// -// Note: Assembly (file) version numbers get inserted by the build system on the fly. Inspect the Team Build workflows -// and the custom activity in Build/Source/Activities/AppendVersionInfo.cs for more information. -// +[assembly: AssemblyVersion("2.2.0.0")] +[assembly: AssemblyFileVersion("2.2.0.0")] +[assembly: AssemblyInformationalVersion("2.2.0.0")] diff --git a/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/ConcurrencyAbstractionLayerImpl.cs b/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/ConcurrencyAbstractionLayerImpl.cs index 4c91463..7cb011b 100644 --- a/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/ConcurrencyAbstractionLayerImpl.cs +++ b/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/ConcurrencyAbstractionLayerImpl.cs @@ -22,16 +22,21 @@ namespace System.Reactive.Concurrency public IDisposable StartPeriodicTimer(Action action, TimeSpan period) { - // - // MSDN documentation states the following: - // - // "If period is zero (0) or negative one (-1) milliseconds and dueTime is positive, callback is invoked once; - // the periodic behavior of the timer is disabled, but can be re-enabled using the Change method." - // - if (period <= TimeSpan.Zero) + if (period < TimeSpan.Zero) throw new ArgumentOutOfRangeException("period"); - return new PeriodicTimer(action, period); + // + // The contract for periodic scheduling in Rx is that specifying TimeSpan.Zero as the period causes the scheduler to + // call back periodically as fast as possible, sequentially. + // + if (period == TimeSpan.Zero) + { + return new FastPeriodicTimer(action); + } + else + { + return new PeriodicTimer(action, period); + } } public IDisposable QueueUserWorkItem(Action action, object state) @@ -366,6 +371,37 @@ namespace System.Reactive.Concurrency } } #endif + + class FastPeriodicTimer : IDisposable + { + private readonly Action _action; + private bool disposed; + + public FastPeriodicTimer(Action action) + { + _action = action; + + new System.Threading.Thread(Loop) + { + Name = "Rx-FastPeriodicTimer", + IsBackground = true + } + .Start(); + } + + private void Loop() + { + while (!disposed) + { + _action(); + } + } + + public void Dispose() + { + disposed = true; + } + } } } #endif \ No newline at end of file diff --git a/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/EventLoopScheduler.cs b/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/EventLoopScheduler.cs index 8739895..98df416 100644 --- a/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/EventLoopScheduler.cs +++ b/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/EventLoopScheduler.cs @@ -295,6 +295,16 @@ namespace System.Reactive.Concurrency lock (_gate) { + // + // Bug fix that ensures the number of calls to Release never greatly exceeds the number of calls to Wait. + // See work item #37: https://rx.codeplex.com/workitem/37 + // +#if !NO_CDS + while (_evt.CurrentCount > 0) _evt.Wait(); +#else + while (_evt.WaitOne(TimeSpan.Zero)) { } +#endif + // // The event could have been set by a call to Dispose. This takes priority over anything else. We quit the // loop immediately. Subsequent calls to Schedule won't ever create a new thread. diff --git a/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/TaskPoolScheduler.cs b/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/TaskPoolScheduler.cs index a84588b..a27e7a6 100644 --- a/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/TaskPoolScheduler.cs +++ b/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Concurrency/TaskPoolScheduler.cs @@ -111,7 +111,11 @@ namespace System.Reactive.Concurrency var ct = new CancellationDisposable(); d.Disposable = ct; +#if USE_TASKEX + TaskEx.Delay(dueTime, ct.Token).ContinueWith(_ => +#else Task.Delay(dueTime, ct.Token).ContinueWith(_ => +#endif { if (!d.IsDisposed) d.Disposable = action(this, state); @@ -190,7 +194,11 @@ namespace System.Reactive.Concurrency var moveNext = default(Action); moveNext = () => { +#if USE_TASKEX + TaskEx.Delay(period, cancel.Token).ContinueWith( +#else Task.Delay(period, cancel.Token).ContinueWith( +#endif _ => { moveNext(); diff --git a/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Internal/PlatformEnlightenmentProvider.cs b/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Internal/PlatformEnlightenmentProvider.cs index 7bb597c..881178b 100644 --- a/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Internal/PlatformEnlightenmentProvider.cs +++ b/Rx/NET/Source/System.Reactive.PlatformServices/Reactive/Internal/PlatformEnlightenmentProvider.cs @@ -88,7 +88,7 @@ namespace System.Reactive.PlatformServices #if NETCF35 var name = "System.Reactive.Linq.QueryDebugger, System.Reactive.Debugger"; #else -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) var ifType = t.GetTypeInfo(); #else var ifType = t; diff --git a/Rx/NET/Source/System.Reactive.PlatformServices/Strings_PlatformServices.Generated.cs b/Rx/NET/Source/System.Reactive.PlatformServices/Strings_PlatformServices.Generated.cs index b9330af..7ac002d 100644 --- a/Rx/NET/Source/System.Reactive.PlatformServices/Strings_PlatformServices.Generated.cs +++ b/Rx/NET/Source/System.Reactive.PlatformServices/Strings_PlatformServices.Generated.cs @@ -53,7 +53,7 @@ namespace System.Reactive { if (object.ReferenceEquals(resourceMan, null)) { -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("System.Reactive.Strings_PlatformServices", typeof(Strings_PlatformServices).GetTypeInfo().Assembly); #else global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("System.Reactive.Strings_PlatformServices", typeof(Strings_PlatformServices).Assembly); diff --git a/Rx/NET/Source/System.Reactive.PlatformServices/System.Reactive.PlatformServices.csproj b/Rx/NET/Source/System.Reactive.PlatformServices/System.Reactive.PlatformServices.csproj index e40f2ab..10f8aa2 100644 --- a/Rx/NET/Source/System.Reactive.PlatformServices/System.Reactive.PlatformServices.csproj +++ b/Rx/NET/Source/System.Reactive.PlatformServices/System.Reactive.PlatformServices.csproj @@ -12,6 +12,7 @@ 512 true ..\Rx.ruleset + ..\ bin\ReleaseXBLV\ @@ -72,4 +73,5 @@ + \ No newline at end of file diff --git a/Rx/NET/Source/System.Reactive.Providers/Properties/AssemblyInfo.cs b/Rx/NET/Source/System.Reactive.Providers/Properties/AssemblyInfo.cs index cc2c4be..1065aa9 100644 --- a/Rx/NET/Source/System.Reactive.Providers/Properties/AssemblyInfo.cs +++ b/Rx/NET/Source/System.Reactive.Providers/Properties/AssemblyInfo.cs @@ -27,7 +27,11 @@ using System.Security; [assembly: AllowPartiallyTrustedCallers] #endif -// -// Note: Assembly (file) version numbers get inserted by the build system on the fly. Inspect the Team Build workflows -// and the custom activity in Build/Source/Activities/AppendVersionInfo.cs for more information. -// +// =========================================================================== +// DO NOT EDIT OR REMOVE ANYTHING BELOW THIS COMMENT. +// Version numbers are automatically generated in the msbuild files based on regular expressions +// =========================================================================== + +[assembly: AssemblyVersion("2.2.0.0")] +[assembly: AssemblyFileVersion("2.2.0.0")] +[assembly: AssemblyInformationalVersion("2.2.0.0")] diff --git a/Rx/NET/Source/System.Reactive.Providers/Reactive/Linq/Qbservable.Generated.cs b/Rx/NET/Source/System.Reactive.Providers/Reactive/Linq/Qbservable.Generated.cs index 2a5f3e4..4a73c80 100644 --- a/Rx/NET/Source/System.Reactive.Providers/Reactive/Linq/Qbservable.Generated.cs +++ b/Rx/NET/Source/System.Reactive.Providers/Reactive/Linq/Qbservable.Generated.cs @@ -1,5 +1,5 @@ /* - * WARNING: Auto-generated file (1/10/2013 8:30:32 PM) + * WARNING: Auto-generated file (11/21/2013 11:07:25 AM) * Run Rx's auto-homoiconizer tool to generate this file (in the HomoIcon directory). */ @@ -7340,6 +7340,80 @@ namespace System.Reactive.Linq ); } + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// The initial number of elements that the underlying dictionary can contain. + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// + /// or is null. + /// + /// is less than 0. + public static IQbservable> GroupBy(this IQbservable source, Expression> keySelector, int capacity) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + + return source.Provider.CreateQuery>( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.GroupBy(default(IQbservable), default(Expression>), default(int))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey)), +#endif + source.Expression, + keySelector, + Expression.Constant(capacity, typeof(int)) + ) + ); + } + + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and comparer. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// The initial number of elements that the underlying dictionary can contain. + /// An equality comparer to compare keys with. + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// + /// or or is null. + /// + /// is less than 0. + public static IQbservable> GroupBy(this IQbservable source, Expression> keySelector, int capacity, IEqualityComparer comparer) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (comparer == null) + throw new ArgumentNullException("comparer"); + + return source.Provider.CreateQuery>( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.GroupBy(default(IQbservable), default(Expression>), default(int), default(IEqualityComparer))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey)), +#endif + source.Expression, + keySelector, + Expression.Constant(capacity, typeof(int)), + Expression.Constant(comparer, typeof(IEqualityComparer)) + ) + ); + } + /// /// Groups the elements of an observable sequence according to a specified key selector function and comparer. /// @@ -7411,6 +7485,90 @@ namespace System.Reactive.Linq ); } + /// + /// Groups the elements of an observable sequence with the specified initial capacity and selects the resulting elements by using a specified function. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements within the groups computed for each element in the source sequence. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to map each source element to an element in an observable group. + /// The initial number of elements that the underlying dictionary can contain. + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// + /// or or is null. + /// + /// is less than 0. + public static IQbservable> GroupBy(this IQbservable source, Expression> keySelector, Expression> elementSelector, int capacity) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (elementSelector == null) + throw new ArgumentNullException("elementSelector"); + + return source.Provider.CreateQuery>( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.GroupBy(default(IQbservable), default(Expression>), default(Expression>), default(int))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TElement)), +#endif + source.Expression, + keySelector, + elementSelector, + Expression.Constant(capacity, typeof(int)) + ) + ); + } + + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and comparer and selects the resulting elements by using a specified function. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements within the groups computed for each element in the source sequence. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to map each source element to an element in an observable group. + /// The initial number of elements that the underlying dictionary can contain. + /// An equality comparer to compare keys with. + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// + /// or or or is null. + /// + /// is less than 0. + public static IQbservable> GroupBy(this IQbservable source, Expression> keySelector, Expression> elementSelector, int capacity, IEqualityComparer comparer) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (elementSelector == null) + throw new ArgumentNullException("elementSelector"); + if (comparer == null) + throw new ArgumentNullException("comparer"); + + return source.Provider.CreateQuery>( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.GroupBy(default(IQbservable), default(Expression>), default(Expression>), default(int), default(IEqualityComparer))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TElement)), +#endif + source.Expression, + keySelector, + elementSelector, + Expression.Constant(capacity, typeof(int)), + Expression.Constant(comparer, typeof(IEqualityComparer)) + ) + ); + } + /// /// Groups the elements of an observable sequence according to a specified key selector function and comparer and selects the resulting elements by using a specified function. /// @@ -7452,93 +7610,283 @@ namespace System.Reactive.Linq } /// - /// Groups the elements of an observable sequence according to a specified key selector function. + /// Groups the elements of an observable sequence according to a specified key selector function. + /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements in the duration sequences obtained for each group to denote its lifetime. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to signal the expiration of a group. + /// + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + /// + /// + /// or or is null. + public static IQbservable> GroupByUntil(this IQbservable source, Expression> keySelector, Expression, IObservable>> durationSelector) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (durationSelector == null) + throw new ArgumentNullException("durationSelector"); + + return source.Provider.CreateQuery>( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.GroupByUntil(default(IQbservable), default(Expression>), default(Expression, IObservable>>))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TDuration)), +#endif + source.Expression, + keySelector, + durationSelector + ) + ); + } + + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function. + /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements in the duration sequences obtained for each group to denote its lifetime. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to signal the expiration of a group. + /// The initial number of elements that the underlying dictionary can contain. + /// + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + /// + /// + /// or or is null. + /// + /// is less than 0. + public static IQbservable> GroupByUntil(this IQbservable source, Expression> keySelector, Expression, IObservable>> durationSelector, int capacity) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (durationSelector == null) + throw new ArgumentNullException("durationSelector"); + + return source.Provider.CreateQuery>( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.GroupByUntil(default(IQbservable), default(Expression>), default(Expression, IObservable>>), default(int))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TDuration)), +#endif + source.Expression, + keySelector, + durationSelector, + Expression.Constant(capacity, typeof(int)) + ) + ); + } + + /// + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and comparer. + /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements in the duration sequences obtained for each group to denote its lifetime. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to signal the expiration of a group. + /// The initial number of elements that the underlying dictionary can contain. + /// An equality comparer to compare keys with. + /// + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + /// + /// + /// or or or is null. + /// + /// is less than 0. + public static IQbservable> GroupByUntil(this IQbservable source, Expression> keySelector, Expression, IObservable>> durationSelector, int capacity, IEqualityComparer comparer) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (durationSelector == null) + throw new ArgumentNullException("durationSelector"); + if (comparer == null) + throw new ArgumentNullException("comparer"); + + return source.Provider.CreateQuery>( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.GroupByUntil(default(IQbservable), default(Expression>), default(Expression, IObservable>>), default(int), default(IEqualityComparer))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TDuration)), +#endif + source.Expression, + keySelector, + durationSelector, + Expression.Constant(capacity, typeof(int)), + Expression.Constant(comparer, typeof(IEqualityComparer)) + ) + ); + } + + /// + /// Groups the elements of an observable sequence according to a specified key selector function and comparer. + /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same + /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. + /// + /// The type of the elements in the source sequence. + /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements in the duration sequences obtained for each group to denote its lifetime. + /// An observable sequence whose elements to group. + /// A function to extract the key for each element. + /// A function to signal the expiration of a group. + /// An equality comparer to compare keys with. + /// + /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. + /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + /// + /// + /// or or or is null. + public static IQbservable> GroupByUntil(this IQbservable source, Expression> keySelector, Expression, IObservable>> durationSelector, IEqualityComparer comparer) + { + if (source == null) + throw new ArgumentNullException("source"); + if (keySelector == null) + throw new ArgumentNullException("keySelector"); + if (durationSelector == null) + throw new ArgumentNullException("durationSelector"); + if (comparer == null) + throw new ArgumentNullException("comparer"); + + return source.Provider.CreateQuery>( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.GroupByUntil(default(IQbservable), default(Expression>), default(Expression, IObservable>>), default(IEqualityComparer))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TDuration)), +#endif + source.Expression, + keySelector, + durationSelector, + Expression.Constant(comparer, typeof(IEqualityComparer)) + ) + ); + } + + /// + /// Groups the elements of an observable sequence according to a specified key selector function and selects the resulting elements by using a specified function. /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. /// /// The type of the elements in the source sequence. /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements within the groups computed for each element in the source sequence. /// The type of the elements in the duration sequences obtained for each group to denote its lifetime. /// An observable sequence whose elements to group. /// A function to extract the key for each element. + /// A function to map each source element to an element in an observable group. /// A function to signal the expiration of a group. /// /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. /// /// - /// or or is null. - public static IQbservable> GroupByUntil(this IQbservable source, Expression> keySelector, Expression, IObservable>> durationSelector) + /// or or or is null. + public static IQbservable> GroupByUntil(this IQbservable source, Expression> keySelector, Expression> elementSelector, Expression, IObservable>> durationSelector) { if (source == null) throw new ArgumentNullException("source"); if (keySelector == null) throw new ArgumentNullException("keySelector"); + if (elementSelector == null) + throw new ArgumentNullException("elementSelector"); if (durationSelector == null) throw new ArgumentNullException("durationSelector"); - return source.Provider.CreateQuery>( + return source.Provider.CreateQuery>( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.GroupByUntil(default(IQbservable), default(Expression>), default(Expression, IObservable>>))), + InfoOf(() => Qbservable.GroupByUntil(default(IQbservable), default(Expression>), default(Expression>), default(Expression, IObservable>>))), #else - ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TDuration)), + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TElement), typeof(TDuration)), #endif source.Expression, keySelector, + elementSelector, durationSelector ) ); } /// - /// Groups the elements of an observable sequence according to a specified key selector function and comparer. + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and selects the resulting elements by using a specified function. /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. /// /// The type of the elements in the source sequence. /// The type of the grouping key computed for each element in the source sequence. + /// The type of the elements within the groups computed for each element in the source sequence. /// The type of the elements in the duration sequences obtained for each group to denote its lifetime. /// An observable sequence whose elements to group. /// A function to extract the key for each element. + /// A function to map each source element to an element in an observable group. /// A function to signal the expiration of a group. - /// An equality comparer to compare keys with. + /// The initial number of elements that the underlying dictionary can contain. /// /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. /// /// - /// or or or is null. - public static IQbservable> GroupByUntil(this IQbservable source, Expression> keySelector, Expression, IObservable>> durationSelector, IEqualityComparer comparer) + /// or or or is null. + /// + /// is less than 0. + public static IQbservable> GroupByUntil(this IQbservable source, Expression> keySelector, Expression> elementSelector, Expression, IObservable>> durationSelector, int capacity) { if (source == null) throw new ArgumentNullException("source"); if (keySelector == null) throw new ArgumentNullException("keySelector"); + if (elementSelector == null) + throw new ArgumentNullException("elementSelector"); if (durationSelector == null) throw new ArgumentNullException("durationSelector"); - if (comparer == null) - throw new ArgumentNullException("comparer"); - return source.Provider.CreateQuery>( + return source.Provider.CreateQuery>( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.GroupByUntil(default(IQbservable), default(Expression>), default(Expression, IObservable>>), default(IEqualityComparer))), + InfoOf(() => Qbservable.GroupByUntil(default(IQbservable), default(Expression>), default(Expression>), default(Expression, IObservable>>), default(int))), #else - ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TDuration)), + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TElement), typeof(TDuration)), #endif source.Expression, keySelector, + elementSelector, durationSelector, - Expression.Constant(comparer, typeof(IEqualityComparer)) + Expression.Constant(capacity, typeof(int)) ) ); } /// - /// Groups the elements of an observable sequence according to a specified key selector function and selects the resulting elements by using a specified function. + /// Groups the elements of an observable sequence with the specified initial capacity according to a specified key selector function and comparer and selects the resulting elements by using a specified function. /// A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same /// key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. /// @@ -7550,13 +7898,17 @@ namespace System.Reactive.Linq /// A function to extract the key for each element. /// A function to map each source element to an element in an observable group. /// A function to signal the expiration of a group. + /// The initial number of elements that the underlying dictionary can contain. + /// An equality comparer to compare keys with. /// /// A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. - /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. + /// If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encountered. /// /// - /// or or or is null. - public static IQbservable> GroupByUntil(this IQbservable source, Expression> keySelector, Expression> elementSelector, Expression, IObservable>> durationSelector) + /// or or or or is null. + /// + /// is less than 0. + public static IQbservable> GroupByUntil(this IQbservable source, Expression> keySelector, Expression> elementSelector, Expression, IObservable>> durationSelector, int capacity, IEqualityComparer comparer) { if (source == null) throw new ArgumentNullException("source"); @@ -7566,19 +7918,23 @@ namespace System.Reactive.Linq throw new ArgumentNullException("elementSelector"); if (durationSelector == null) throw new ArgumentNullException("durationSelector"); + if (comparer == null) + throw new ArgumentNullException("comparer"); return source.Provider.CreateQuery>( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.GroupByUntil(default(IQbservable), default(Expression>), default(Expression>), default(Expression, IObservable>>))), + InfoOf(() => Qbservable.GroupByUntil(default(IQbservable), default(Expression>), default(Expression>), default(Expression, IObservable>>), default(int), default(IEqualityComparer))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TKey), typeof(TElement), typeof(TDuration)), #endif source.Expression, keySelector, elementSelector, - durationSelector + durationSelector, + Expression.Constant(capacity, typeof(int)), + Expression.Constant(comparer, typeof(IEqualityComparer)) ) ); } @@ -8508,27 +8864,27 @@ namespace System.Reactive.Linq } /// - /// Invokes a transform function on each element of a sequence and returns the maximum nullable value. + /// Invokes a transform function on each element of a sequence and returns the maximum value. /// /// The type of the elements in the source sequence. /// A sequence of values to determine the maximum value of. /// A transform function to apply to each element. - /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. /// /// or is null. /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Max(this IQbservable source, Expression> selector) + public static IQbservable Max(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -8539,27 +8895,27 @@ namespace System.Reactive.Linq } /// - /// Invokes a transform function on each element of a sequence and returns the maximum nullable value. + /// Invokes a transform function on each element of a sequence and returns the maximum value. /// /// The type of the elements in the source sequence. /// A sequence of values to determine the maximum value of. /// A transform function to apply to each element. - /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. /// /// or is null. /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Max(this IQbservable source, Expression> selector) + public static IQbservable Max(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -8570,27 +8926,27 @@ namespace System.Reactive.Linq } /// - /// Invokes a transform function on each element of a sequence and returns the maximum value. + /// Invokes a transform function on each element of a sequence and returns the maximum value. /// /// The type of the elements in the source sequence. /// A sequence of values to determine the maximum value of. /// A transform function to apply to each element. - /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. /// /// or is null. /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Max(this IQbservable source, Expression> selector) + public static IQbservable Max(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -8601,27 +8957,27 @@ namespace System.Reactive.Linq } /// - /// Invokes a transform function on each element of a sequence and returns the maximum value. + /// Invokes a transform function on each element of a sequence and returns the maximum value. /// /// The type of the elements in the source sequence. /// A sequence of values to determine the maximum value of. /// A transform function to apply to each element. - /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. /// /// or is null. /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Max(this IQbservable source, Expression> selector) + public static IQbservable Max(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -8632,27 +8988,27 @@ namespace System.Reactive.Linq } /// - /// Invokes a transform function on each element of a sequence and returns the maximum value. + /// Invokes a transform function on each element of a sequence and returns the maximum value. /// /// The type of the elements in the source sequence. /// A sequence of values to determine the maximum value of. /// A transform function to apply to each element. - /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. /// /// or is null. /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Max(this IQbservable source, Expression> selector) + public static IQbservable Max(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -8663,27 +9019,27 @@ namespace System.Reactive.Linq } /// - /// Invokes a transform function on each element of a sequence and returns the maximum value. + /// Invokes a transform function on each element of a sequence and returns the maximum nullable value. /// /// The type of the elements in the source sequence. /// A sequence of values to determine the maximum value of. /// A transform function to apply to each element. - /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. /// /// or is null. /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Max(this IQbservable source, Expression> selector) + public static IQbservable Max(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -8694,27 +9050,27 @@ namespace System.Reactive.Linq } /// - /// Invokes a transform function on each element of a sequence and returns the maximum value. + /// Invokes a transform function on each element of a sequence and returns the maximum nullable value. /// /// The type of the elements in the source sequence. /// A sequence of values to determine the maximum value of. /// A transform function to apply to each element. - /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. /// /// or is null. /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Max(this IQbservable source, Expression> selector) + public static IQbservable Max(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -8725,27 +9081,27 @@ namespace System.Reactive.Linq } /// - /// Invokes a transform function on each element of a sequence and returns the maximum nullable value. + /// Invokes a transform function on each element of a sequence and returns the maximum nullable value. /// /// The type of the elements in the source sequence. /// A sequence of values to determine the maximum value of. /// A transform function to apply to each element. - /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. /// /// or is null. /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Max(this IQbservable source, Expression> selector) + public static IQbservable Max(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -8756,27 +9112,27 @@ namespace System.Reactive.Linq } /// - /// Invokes a transform function on each element of a sequence and returns the maximum nullable value. + /// Invokes a transform function on each element of a sequence and returns the maximum nullable value. /// /// The type of the elements in the source sequence. /// A sequence of values to determine the maximum value of. /// A transform function to apply to each element. - /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. /// /// or is null. /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Max(this IQbservable source, Expression> selector) + public static IQbservable Max(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -8787,27 +9143,27 @@ namespace System.Reactive.Linq } /// - /// Invokes a transform function on each element of a sequence and returns the maximum nullable value. + /// Invokes a transform function on each element of a sequence and returns the maximum nullable value. /// /// The type of the elements in the source sequence. /// A sequence of values to determine the maximum value of. /// A transform function to apply to each element. - /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. + /// An observable sequence containing a single element with the value of type that corresponds to the maximum value in the source sequence. /// /// or is null. /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Max(this IQbservable source, Expression> selector) + public static IQbservable Max(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Max(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -11431,10 +11787,10 @@ namespace System.Reactive.Linq } /// - /// Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Projects each element of an observable sequence to an enumerable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. /// /// The type of the elements in the source sequence. - /// The type of the elements in the projected intermediate sequences. + /// The type of the elements in the projected intermediate enumerable sequences. /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. /// An observable sequence of elements to project. /// A transform function to apply to each element. @@ -11442,7 +11798,8 @@ namespace System.Reactive.Linq /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. /// /// or or is null. - public static IQbservable SelectMany(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IQbservable SelectMany(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) { if (source == null) throw new ArgumentNullException("source"); @@ -11455,7 +11812,7 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TCollection), typeof(TResult)), #endif @@ -11467,18 +11824,19 @@ namespace System.Reactive.Linq } /// - /// Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Projects each element of an observable sequence to an enumerable sequence by incorporating the element's index, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. /// /// The type of the elements in the source sequence. - /// The type of the elements in the projected intermediate sequences. + /// The type of the elements in the projected intermediate enumerable sequences. /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. /// An observable sequence of elements to project. - /// A transform function to apply to each source element; the second parameter of the function represents the index of the source element. - /// A transform function to apply to each element of the intermediate sequence. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element and the fourth parameter represents the index of the intermediate element. /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. /// /// or or is null. - public static IQbservable SelectMany(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IQbservable SelectMany(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) { if (source == null) throw new ArgumentNullException("source"); @@ -11491,7 +11849,7 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TCollection), typeof(TResult)), #endif @@ -11503,10 +11861,10 @@ namespace System.Reactive.Linq } /// - /// Projects each element of an observable sequence to an enumerable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. /// /// The type of the elements in the source sequence. - /// The type of the elements in the projected intermediate enumerable sequences. + /// The type of the elements in the projected intermediate sequences. /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. /// An observable sequence of elements to project. /// A transform function to apply to each element. @@ -11514,8 +11872,7 @@ namespace System.Reactive.Linq /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. /// /// or or is null. - /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. - public static IQbservable SelectMany(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) + public static IQbservable SelectMany(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) { if (source == null) throw new ArgumentNullException("source"); @@ -11528,7 +11885,7 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TCollection), typeof(TResult)), #endif @@ -11540,19 +11897,18 @@ namespace System.Reactive.Linq } /// - /// Projects each element of an observable sequence to an enumerable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. + /// Projects each element of an observable sequence to an observable sequence by incorporating the element's index, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. /// /// The type of the elements in the source sequence. - /// The type of the elements in the projected intermediate enumerable sequences. + /// The type of the elements in the projected intermediate sequences. /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate sequence elements. /// An observable sequence of elements to project. /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. - /// A transform function to apply to each element of the intermediate sequence. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element and the fourth parameter represents the index of the intermediate element. /// An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. /// /// or or is null. - /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. - public static IQbservable SelectMany(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) + public static IQbservable SelectMany(this IQbservable source, Expression>> collectionSelector, Expression> resultSelector) { if (source == null) throw new ArgumentNullException("source"); @@ -11565,7 +11921,7 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TCollection), typeof(TResult)), #endif @@ -11634,53 +11990,117 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>>), default(Expression>>))), + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>>), default(Expression>>))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TResult)), +#endif + source.Expression, + onNext, + onError, + onCompleted + ) + ); + } + + /// + /// Projects each notification of an observable sequence to an observable sequence by incorporating the element's index and merges the resulting observable sequences into one observable sequence. + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. + /// An observable sequence of notifications to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply when an error occurs in the source sequence. + /// A transform function to apply when the end of the source sequence is reached. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. + /// + /// or or or is null. + public static IQbservable SelectMany(this IQbservable source, Expression>> onNext, Expression>> onError, Expression>> onCompleted) + { + if (source == null) + throw new ArgumentNullException("source"); + if (onNext == null) + throw new ArgumentNullException("onNext"); + if (onError == null) + throw new ArgumentNullException("onError"); + if (onCompleted == null) + throw new ArgumentNullException("onCompleted"); + + return source.Provider.CreateQuery( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>>), default(Expression>>))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TResult)), +#endif + source.Expression, + onNext, + onError, + onCompleted + ) + ); + } + + /// + /// Projects each element of an observable sequence to an enumerable sequence and concatenates the resulting enumerable sequences into one observable sequence. + /// + /// The type of the elements in the source sequence. + /// The type of the elements in the projected inner enumerable sequences and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// + /// or is null. + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IQbservable SelectMany(this IQbservable source, Expression>> selector) + { + if (source == null) + throw new ArgumentNullException("source"); + if (selector == null) + throw new ArgumentNullException("selector"); + + return source.Provider.CreateQuery( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TResult)), #endif source.Expression, - onNext, - onError, - onCompleted + selector ) ); } /// - /// Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. + /// Projects each element of an observable sequence to an enumerable sequence by incorporating the element's index and concatenates the resulting enumerable sequences into one observable sequence. /// /// The type of the elements in the source sequence. - /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. - /// An observable sequence of notifications to project. - /// A transform function to apply to each element; the second parameter represents the index of the source element. - /// A transform function to apply when an error occurs in the source sequence; the second parameter represents the index of the source element. - /// A transform function to apply when the end of the source sequence is reached; the second parameter represents the number of elements observed. - /// An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. + /// The type of the elements in the projected inner enumerable sequences and the elements in the merged result sequence. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. /// - /// or or or is null. - public static IQbservable SelectMany(this IQbservable source, Expression>> onNext, Expression>> onError, Expression>> onCompleted) + /// or is null. + /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. + public static IQbservable SelectMany(this IQbservable source, Expression>> selector) { if (source == null) throw new ArgumentNullException("source"); - if (onNext == null) - throw new ArgumentNullException("onNext"); - if (onError == null) - throw new ArgumentNullException("onError"); - if (onCompleted == null) - throw new ArgumentNullException("onCompleted"); + if (selector == null) + throw new ArgumentNullException("selector"); return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>>), default(Expression>>))), + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TResult)), #endif source.Expression, - onNext, - onError, - onCompleted + selector ) ); } @@ -11717,12 +12137,12 @@ namespace System.Reactive.Linq } /// - /// Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. + /// Projects each element of an observable sequence to an observable sequence by incorporating the element's index and merges the resulting observable sequences into one observable sequence. /// /// The type of the elements in the source sequence. /// The type of the elements in the projected inner sequences and the elements in the merged result sequence. /// An observable sequence of elements to project. - /// A transform function to apply to each source element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. /// /// or is null. @@ -11783,17 +12203,17 @@ namespace System.Reactive.Linq #if !NO_TPL /// - /// Projects each element of an observable sequence to a task with cancellation support and merges all of the task results into one observable sequence. + /// Projects each element of an observable sequence to a task by incorporating the element's index and merges all of the task results into one observable sequence. /// /// The type of the elements in the source sequence. /// The type of the result produced by the projected tasks and the elements in the merged result sequence. /// An observable sequence of elements to project. - /// A transform function to apply to each element. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . /// /// or is null. - public static IQbservable SelectMany(this IQbservable source, Expression>> selector) + public static IQbservable SelectMany(this IQbservable source, Expression>> selector) { if (source == null) throw new ArgumentNullException("source"); @@ -11804,7 +12224,7 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>))), + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TResult)), #endif @@ -11815,18 +12235,19 @@ namespace System.Reactive.Linq } #endif +#if !NO_TPL /// - /// Projects each element of an observable sequence to an enumerable sequence and concatenates the resulting enumerable sequences into one observable sequence. + /// Projects each element of an observable sequence to a task with cancellation support and merges all of the task results into one observable sequence. /// /// The type of the elements in the source sequence. - /// The type of the elements in the projected inner enumerable sequences and the elements in the merged result sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. /// An observable sequence of elements to project. /// A transform function to apply to each element. - /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . /// /// or is null. - /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. - public static IQbservable SelectMany(this IQbservable source, Expression>> selector) + public static IQbservable SelectMany(this IQbservable source, Expression>> selector) { if (source == null) throw new ArgumentNullException("source"); @@ -11837,7 +12258,7 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>))), + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TResult)), #endif @@ -11846,20 +12267,21 @@ namespace System.Reactive.Linq ) ); } +#endif +#if !NO_TPL /// - /// Projects each element of an observable sequence to an enumerable sequence and concatenates the resulting enumerable sequences into one observable sequence. - /// The index of each source element is used in the projected form of that element. + /// Projects each element of an observable sequence to a task by incorporating the element's index with cancellation support and merges all of the task results into one observable sequence. /// /// The type of the elements in the source sequence. - /// The type of the elements in the projected inner enumerable sequences and the elements in the merged result sequence. + /// The type of the result produced by the projected tasks and the elements in the merged result sequence. /// An observable sequence of elements to project. - /// A transform function to apply to each source element; the second parameter of the function represents the index of the source element. - /// An observable sequence whose elements are the result of invoking the one-to-many transform function on each element of the input sequence. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of the tasks executed for each element of the input sequence. + /// This overload supports composition of observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . /// /// or is null. - /// The projected sequences are enumerated synchonously within the OnNext call of the source sequence. In order to do a concurrent, non-blocking merge, change the selector to return an observable sequence obtained using the conversion. - public static IQbservable SelectMany(this IQbservable source, Expression>> selector) + public static IQbservable SelectMany(this IQbservable source, Expression>> selector) { if (source == null) throw new ArgumentNullException("source"); @@ -11870,7 +12292,7 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>))), + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TResult)), #endif @@ -11879,6 +12301,85 @@ namespace System.Reactive.Linq ) ); } +#endif + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task with cancellation support, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element. + /// A transform function to apply to each element of the intermediate sequence. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IQbservable SelectMany(this IQbservable source, Expression>> taskSelector, Expression> resultSelector) + { + if (source == null) + throw new ArgumentNullException("source"); + if (taskSelector == null) + throw new ArgumentNullException("taskSelector"); + if (resultSelector == null) + throw new ArgumentNullException("resultSelector"); + + return source.Provider.CreateQuery( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TTaskResult), typeof(TResult)), +#endif + source.Expression, + taskSelector, + resultSelector + ) + ); + } +#endif + +#if !NO_TPL + /// + /// Projects each element of an observable sequence to a task by incorporating the element's index with cancellation support, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// + /// The type of the elements in the source sequence. + /// The type of the results produced by the projected intermediate tasks. + /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. + /// An observable sequence of elements to project. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element. + /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. + /// + /// or or is null. + /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . + public static IQbservable SelectMany(this IQbservable source, Expression>> taskSelector, Expression> resultSelector) + { + if (source == null) + throw new ArgumentNullException("source"); + if (taskSelector == null) + throw new ArgumentNullException("taskSelector"); + if (resultSelector == null) + throw new ArgumentNullException("resultSelector"); + + return source.Provider.CreateQuery( + Expression.Call( + null, +#if CRIPPLED_REFLECTION + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), +#else + ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TTaskResult), typeof(TResult)), +#endif + source.Expression, + taskSelector, + resultSelector + ) + ); + } +#endif #if !NO_TPL /// @@ -11921,19 +12422,19 @@ namespace System.Reactive.Linq #if !NO_TPL /// - /// Projects each element of an observable sequence to a task with cancellation support, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. + /// Projects each element of an observable sequence to a task by incorporating the element's index, invokes the result selector for the source element and the task result, and merges the results into one observable sequence. /// /// The type of the elements in the source sequence. /// The type of the results produced by the projected intermediate tasks. /// The type of the elements in the result sequence, obtained by using the selector to combine source sequence elements with their corresponding intermediate task results. /// An observable sequence of elements to project. - /// A transform function to apply to each element. - /// A transform function to apply to each element of the intermediate sequence. + /// A transform function to apply to each element; the second parameter of the function represents the index of the source element. + /// A transform function to apply to each element of the intermediate sequence; the second parameter of the function represents the index of the source element. /// An observable sequence whose elements are the result of obtaining a task for each element of the input sequence and then mapping the task's result and its corresponding source element to a result element. /// /// or or is null. /// This overload supports using LINQ query comprehension syntax in C# and Visual Basic to compose observable sequences and tasks, without requiring manual conversion of the tasks to observable sequences using . - public static IQbservable SelectMany(this IQbservable source, Expression>> taskSelector, Expression> resultSelector) + public static IQbservable SelectMany(this IQbservable source, Expression>> taskSelector, Expression> resultSelector) { if (source == null) throw new ArgumentNullException("source"); @@ -11946,7 +12447,7 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), + InfoOf(() => Qbservable.SelectMany(default(IQbservable), default(Expression>>), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource), typeof(TTaskResult), typeof(TResult)), #endif @@ -13403,7 +13904,7 @@ namespace System.Reactive.Linq } /// - /// Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. + /// Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. /// /// The type of the elements in the source sequence. /// A sequence of values that are used to calculate a sum. @@ -13411,19 +13912,20 @@ namespace System.Reactive.Linq /// An observable sequence containing a single element with the sum of the values in the source sequence. /// /// or is null. + /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Sum(this IQbservable source, Expression> selector) + public static IQbservable Sum(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -13434,7 +13936,7 @@ namespace System.Reactive.Linq } /// - /// Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. + /// Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. /// /// The type of the elements in the source sequence. /// A sequence of values that are used to calculate a sum. @@ -13442,19 +13944,20 @@ namespace System.Reactive.Linq /// An observable sequence containing a single element with the sum of the values in the source sequence. /// /// or is null. + /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Sum(this IQbservable source, Expression> selector) + public static IQbservable Sum(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -13465,7 +13968,7 @@ namespace System.Reactive.Linq } /// - /// Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. + /// Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. /// /// The type of the elements in the source sequence. /// A sequence of values that are used to calculate a sum. @@ -13473,20 +13976,19 @@ namespace System.Reactive.Linq /// An observable sequence containing a single element with the sum of the values in the source sequence. /// /// or is null. - /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Sum(this IQbservable source, Expression> selector) + public static IQbservable Sum(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -13497,7 +13999,7 @@ namespace System.Reactive.Linq } /// - /// Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. + /// Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. /// /// The type of the elements in the source sequence. /// A sequence of values that are used to calculate a sum. @@ -13505,20 +14007,19 @@ namespace System.Reactive.Linq /// An observable sequence containing a single element with the sum of the values in the source sequence. /// /// or is null. - /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Sum(this IQbservable source, Expression> selector) + public static IQbservable Sum(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -13529,7 +14030,7 @@ namespace System.Reactive.Linq } /// - /// Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. + /// Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. /// /// The type of the elements in the source sequence. /// A sequence of values that are used to calculate a sum. @@ -13537,20 +14038,20 @@ namespace System.Reactive.Linq /// An observable sequence containing a single element with the sum of the values in the source sequence. /// /// or is null. - /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . + /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Sum(this IQbservable source, Expression> selector) + public static IQbservable Sum(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -13561,7 +14062,7 @@ namespace System.Reactive.Linq } /// - /// Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. + /// Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. /// /// The type of the elements in the source sequence. /// A sequence of values that are used to calculate a sum. @@ -13569,19 +14070,20 @@ namespace System.Reactive.Linq /// An observable sequence containing a single element with the sum of the values in the source sequence. /// /// or is null. + /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Sum(this IQbservable source, Expression> selector) + public static IQbservable Sum(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -13592,7 +14094,7 @@ namespace System.Reactive.Linq } /// - /// Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. + /// Computes the sum of a sequence of values that are obtained by invoking a transform function on each element of the input sequence. /// /// The type of the elements in the source sequence. /// A sequence of values that are used to calculate a sum. @@ -13600,19 +14102,20 @@ namespace System.Reactive.Linq /// An observable sequence containing a single element with the sum of the values in the source sequence. /// /// or is null. + /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Sum(this IQbservable source, Expression> selector) + public static IQbservable Sum(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -13623,7 +14126,7 @@ namespace System.Reactive.Linq } /// - /// Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. + /// Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. /// /// The type of the elements in the source sequence. /// A sequence of values that are used to calculate a sum. @@ -13631,20 +14134,19 @@ namespace System.Reactive.Linq /// An observable sequence containing a single element with the sum of the values in the source sequence. /// /// or is null. - /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Sum(this IQbservable source, Expression> selector) + public static IQbservable Sum(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -13655,7 +14157,7 @@ namespace System.Reactive.Linq } /// - /// Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. + /// Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. /// /// The type of the elements in the source sequence. /// A sequence of values that are used to calculate a sum. @@ -13663,20 +14165,19 @@ namespace System.Reactive.Linq /// An observable sequence containing a single element with the sum of the values in the source sequence. /// /// or is null. - /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Sum(this IQbservable source, Expression> selector) + public static IQbservable Sum(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -13687,7 +14188,7 @@ namespace System.Reactive.Linq } /// - /// Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. + /// Computes the sum of a sequence of nullable values that are obtained by invoking a transform function on each element of the input sequence. /// /// The type of the elements in the source sequence. /// A sequence of values that are used to calculate a sum. @@ -13695,20 +14196,20 @@ namespace System.Reactive.Linq /// An observable sequence containing a single element with the sum of the values in the source sequence. /// /// or is null. - /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . + /// (Asynchronous) The sum of the projected values for the elements in the source sequence is larger than . /// The return type of this operator differs from the corresponding operator on IEnumerable in order to retain asynchronous behavior. - public static IQbservable Sum(this IQbservable source, Expression> selector) + public static IQbservable Sum(this IQbservable source, Expression> selector) { if (source == null) throw new ArgumentNullException("source"); if (selector == null) throw new ArgumentNullException("selector"); - return source.Provider.CreateQuery( + return source.Provider.CreateQuery( Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), + InfoOf(() => Qbservable.Sum(default(IQbservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource)), #endif @@ -13719,8 +14220,10 @@ namespace System.Reactive.Linq } /// - /// Switches between the inner observable sequences such that the resulting sequence always produces elements from the most recently received inner observable sequence. - /// Each time a new inner observable sequence is received, the previous inner observable sequence is unsubscribed from. + /// Transforms an observable sequence of observable sequences into an observable sequence + /// producing values only from the most recent observable sequence. + /// Each time a new inner observable sequence is received, unsubscribe from the + /// previous inner observable sequence. /// /// The type of the elements in the source sequences. /// Observable sequence of inner observable sequences. @@ -13747,7 +14250,8 @@ namespace System.Reactive.Linq #if !NO_TPL /// - /// Switches between the tasks such that the resulting sequence always produces results from the most recently received task. + /// Transforms an observable sequence of tasks into an observable sequence + /// producing values only from the most recent observable sequence. /// Each time a new task is received, the previous task's result is ignored. /// /// The type of the results produced by the source tasks. @@ -16640,18 +17144,18 @@ namespace System.Reactive.Linq } /// - /// Merges two observable sequences into one observable sequence by combining their elements in a pairwise fashion. + /// Merges an observable sequence and an enumerable sequence into one observable sequence by using the selector function. /// - /// The type of the elements in the first source sequence. - /// The type of the elements in the second source sequence. + /// The type of the elements in the first observable source sequence. + /// The type of the elements in the second enumerable source sequence. /// The type of the elements in the result sequence, returned by the selector function. /// First observable source. - /// Second observable source. + /// Second enumerable source. /// Function to invoke for each consecutive pair of elements from the first and second source. /// An observable sequence containing the result of pairwise combining the elements of the first and second source using the specified result selector function. /// /// or or is null. - public static IQbservable Zip(this IQbservable first, IObservable second, Expression> resultSelector) + public static IQbservable Zip(this IQbservable first, IEnumerable second, Expression> resultSelector) { if (first == null) throw new ArgumentNullException("first"); @@ -16664,7 +17168,7 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Zip(default(IQbservable), default(IObservable), default(Expression>))), + InfoOf(() => Qbservable.Zip(default(IQbservable), default(IEnumerable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource1), typeof(TSource2), typeof(TResult)), #endif @@ -16676,18 +17180,18 @@ namespace System.Reactive.Linq } /// - /// Merges an observable sequence and an enumerable sequence into one observable sequence by using the selector function. + /// Merges two observable sequences into one observable sequence by combining their elements in a pairwise fashion. /// - /// The type of the elements in the first observable source sequence. - /// The type of the elements in the second enumerable source sequence. + /// The type of the elements in the first source sequence. + /// The type of the elements in the second source sequence. /// The type of the elements in the result sequence, returned by the selector function. /// First observable source. - /// Second enumerable source. + /// Second observable source. /// Function to invoke for each consecutive pair of elements from the first and second source. /// An observable sequence containing the result of pairwise combining the elements of the first and second source using the specified result selector function. /// /// or or is null. - public static IQbservable Zip(this IQbservable first, IEnumerable second, Expression> resultSelector) + public static IQbservable Zip(this IQbservable first, IObservable second, Expression> resultSelector) { if (first == null) throw new ArgumentNullException("first"); @@ -16700,7 +17204,7 @@ namespace System.Reactive.Linq Expression.Call( null, #if CRIPPLED_REFLECTION - InfoOf(() => Qbservable.Zip(default(IQbservable), default(IEnumerable), default(Expression>))), + InfoOf(() => Qbservable.Zip(default(IQbservable), default(IObservable), default(Expression>))), #else ((MethodInfo)MethodInfo.GetCurrentMethod()).MakeGenericMethod(typeof(TSource1), typeof(TSource2), typeof(TResult)), #endif diff --git a/Rx/NET/Source/System.Reactive.Providers/Reactive/ObservableQuery.cs b/Rx/NET/Source/System.Reactive.Providers/Reactive/ObservableQuery.cs index 383b75f..c0bb21b 100644 --- a/Rx/NET/Source/System.Reactive.Providers/Reactive/ObservableQuery.cs +++ b/Rx/NET/Source/System.Reactive.Providers/Reactive/ObservableQuery.cs @@ -184,7 +184,7 @@ namespace System.Reactive { var method = node.Method; var declaringType = method.DeclaringType; -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) var baseType = declaringType.GetTypeInfo().BaseType; #else var baseType = declaringType.BaseType; @@ -368,7 +368,7 @@ namespace System.Reactive { targetType = method.DeclaringType; -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) var typeInfo = targetType.GetTypeInfo(); if (typeInfo.IsDefined(typeof(LocalQueryMethodImplementationTypeAttribute), false)) { @@ -417,7 +417,7 @@ namespace System.Reactive private static ILookup GetMethods(Type type) { -#if !CRIPPLED_REFLECTION +#if !(CRIPPLED_REFLECTION && HAS_WINRT) return type.GetMethods(BindingFlags.Static | BindingFlags.Public).ToLookup(m => m.Name); #else return type.GetTypeInfo().DeclaredMethods.Where(m => m.IsStatic && m.IsPublic).ToLookup(m => m.Name); @@ -492,7 +492,7 @@ namespace System.Reactive } } -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) static class Helpers { public static MethodInfo GetMethod(this Type type, string name) diff --git a/Rx/NET/Source/System.Reactive.Providers/Strings_Providers.Generated.cs b/Rx/NET/Source/System.Reactive.Providers/Strings_Providers.Generated.cs index df6e798..5443ec0 100644 --- a/Rx/NET/Source/System.Reactive.Providers/Strings_Providers.Generated.cs +++ b/Rx/NET/Source/System.Reactive.Providers/Strings_Providers.Generated.cs @@ -53,7 +53,7 @@ namespace System.Reactive { if (object.ReferenceEquals(resourceMan, null)) { -#if CRIPPLED_REFLECTION +#if (CRIPPLED_REFLECTION && HAS_WINRT) global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("System.Reactive.Strings_Providers", typeof(Strings_Providers).GetTypeInfo().Assembly); #else global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("System.Reactive.Strings_Providers", typeof(Strings_Providers).Assembly); diff --git a/Rx/NET/Source/System.Reactive.Providers/System.Reactive.Providers.csproj b/Rx/NET/Source/System.Reactive.Providers/System.Reactive.Providers.csproj index b0f7e21..2814eb3 100644 --- a/Rx/NET/Source/System.Reactive.Providers/System.Reactive.Providers.csproj +++ b/Rx/NET/Source/System.Reactive.Providers/System.Reactive.Providers.csproj @@ -15,6 +15,7 @@ 512 true ..\Rx.ruleset + ..\ bin\ReleaseXBLV\ @@ -64,6 +65,7 @@ + - + @@ -62,6 +62,7 @@ + @@ -70,6 +71,7 @@ + @@ -161,6 +163,10 @@ {9E9B9C60-98B0-40FA-9C2B-1218D417CAA4} System.Reactive.Interfaces + + {9ffac385-10a4-4ddd-b800-de67e8469cc0} + System.Reactive.Observable.Aliases + {0CCCF009-763F-40D2-8655-7A94828023BF} System.Reactive.PlatformServices @@ -173,7 +179,7 @@ {63252AE9-5186-45CA-BFCD-FA51C6B66A43} System.Reactive.Linq - + {7A6EF49E-7946-4101-9C89-407B9C53A173} System.Reactive.Runtime.Remoting diff --git a/Rx/NET/Source/Tests.System.Reactive/Tests/Aliases.cs b/Rx/NET/Source/Tests.System.Reactive/Tests/Aliases.cs new file mode 100644 index 0000000..dd2ff20 --- /dev/null +++ b/Rx/NET/Source/Tests.System.Reactive/Tests/Aliases.cs @@ -0,0 +1,30 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reactive; +using System.Reactive.Concurrency; +using System.Threading; +using Microsoft.Reactive.Testing; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using System.Reactive.Linq; +using System.Reactive.Observable.Aliases; + +namespace ReactiveTests.Tests +{ + [TestClass] + public partial class AliasesTest : ReactiveTest + { + [TestMethod] + public void Qbservable_Aliases() + { + var xs = Observable.Return(1).AsQbservable(); + + Assert.IsTrue(xs.Filter(x => true).ToEnumerable().SequenceEqual(new[] { 1 }), "Filter"); + Assert.IsTrue(xs.Filter(x => true).Concat(xs.Filter(x => false)).ToEnumerable().SequenceEqual(new[] { 1 }), "Concat/Filter"); + Assert.IsTrue(xs.Map(x => x.ToString()).ToEnumerable().SequenceEqual(new[] { "1" }), "Map"); + Assert.IsTrue(xs.FlatMap(x => xs).ToEnumerable().SequenceEqual(new[] { 1 }), "FlatMap"); + } + } +} diff --git a/Rx/NET/Source/Tests.System.Reactive/Tests/Concurrency/EventLoopSchedulerTest.cs b/Rx/NET/Source/Tests.System.Reactive/Tests/Concurrency/EventLoopSchedulerTest.cs index f5b06f6..4f13f17 100644 --- a/Rx/NET/Source/Tests.System.Reactive/Tests/Concurrency/EventLoopSchedulerTest.cs +++ b/Rx/NET/Source/Tests.System.Reactive/Tests/Concurrency/EventLoopSchedulerTest.cs @@ -7,6 +7,9 @@ using System.Reactive.Concurrency; using System.Threading; using Microsoft.Reactive.Testing; using Microsoft.VisualStudio.TestTools.UnitTesting; +#if STRESS +using ReactiveTests.Stress.Schedulers; +#endif namespace ReactiveTests.Tests { @@ -370,5 +373,13 @@ namespace ReactiveTests.Tests d.Dispose(); } } + +#if STRESS + [TestMethod] + public void EventLoop_Stress() + { + EventLoop.NoSemaphoreFullException(); + } +#endif } } diff --git a/Rx/NET/Source/Tests.System.Reactive/Tests/DefaultConcurrencyAbstractionLayerTest.cs b/Rx/NET/Source/Tests.System.Reactive/Tests/DefaultConcurrencyAbstractionLayerTest.cs index a818db4..74f82e6 100644 --- a/Rx/NET/Source/Tests.System.Reactive/Tests/DefaultConcurrencyAbstractionLayerTest.cs +++ b/Rx/NET/Source/Tests.System.Reactive/Tests/DefaultConcurrencyAbstractionLayerTest.cs @@ -146,6 +146,69 @@ namespace ReactiveTests.Tests }); } + [TestMethod] + public void StartPeriodicTimer_Fast() + { + var e = new MarshalByRefCell { Value = new ManualResetEvent(false) }; + _domain.SetData("state", e); + + Run(() => + { + var n = 0; + + Scheduler.Default.SchedulePeriodic(TimeSpan.Zero, () => + { + var state = (MarshalByRefCell)_domain.GetData("state"); + + if (n++ == 10) + state.Value.Set(); + }); + }); + + e.Value.WaitOne(); + } + + [TestMethod] + public void StartPeriodicTimer_Fast_Cancel() + { + var e = new MarshalByRefCell { Value = new ManualResetEvent(false) }; + _domain.SetData("set_cancel", e); + + Run(() => + { + var n = 0; + + var schedule = Scheduler.Default.SchedulePeriodic(TimeSpan.Zero, () => + { + _domain.SetData("value", n++); + }); + + _domain.SetData("cancel", new MarshalByRefAction(schedule.Dispose)); + + var setCancel = (MarshalByRefCell)_domain.GetData("set_cancel"); + setCancel.Value.Set(); + }); + + e.Value.WaitOne(); + + var value = (int)_domain.GetData("value"); + + var cancel = (MarshalByRefAction)_domain.GetData("cancel"); + cancel.Invoke(); + + Thread.Sleep(TimeSpan.FromMilliseconds(50)); + + var newValue = (int)_domain.GetData("value"); + + Assert.IsTrue(newValue >= value); + + Thread.Sleep(TimeSpan.FromMilliseconds(50)); + + value = (int)_domain.GetData("value"); + + Assert.AreEqual(newValue, value); + } + [TestMethod] public void CreateThread() { @@ -287,5 +350,20 @@ namespace ReactiveTests.Tests { public T Value; } + + public class MarshalByRefAction : MarshalByRefObject + { + private readonly Action _action; + + public MarshalByRefAction(Action action) + { + _action = action; + } + + public void Invoke() + { + _action(); + } + } } #endif \ No newline at end of file diff --git a/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/ObservableStandardQueryOperatorTest.cs b/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/ObservableStandardQueryOperatorTest.cs index 0670909..dd17353 100644 --- a/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/ObservableStandardQueryOperatorTest.cs +++ b/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/ObservableStandardQueryOperatorTest.cs @@ -2486,7 +2486,7 @@ namespace ReactiveTests.Tests var nullGroup = scheduler.CreateObserver(); var err = default(Exception); - + scheduler.ScheduleAbsolute(200, () => xs.GroupBy(x => x[0] == 'b' ? null : x.ToUpper()).Where(g => g.Key == null).Subscribe(g => g.Subscribe(nullGroup), ex_ => err = ex_)); scheduler.Start(); @@ -2553,34 +2553,56 @@ namespace ReactiveTests.Tests #endregion - #region + GroupByUntil + + #region + GroupBy w/capacity + + + private const int _groupByCapacity = 1024; [TestMethod] - public void GroupByUntil_ArgumentChecking() + public void GroupBy_Capacity_ArgumentChecking() { - ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, EqualityComparer.Default)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc.Instance, DummyFunc, IObservable>.Instance, EqualityComparer.Default)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func), DummyFunc, IObservable>.Instance, EqualityComparer.Default)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, default(Func, IObservable>), EqualityComparer.Default)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, default(IEqualityComparer))); + ReactiveAssert.Throws(() => ((IObservable)null).GroupBy(DummyFunc.Instance, DummyFunc.Instance, _groupByCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy((Func)null, DummyFunc.Instance, _groupByCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, (Func)null, _groupByCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, DummyFunc.Instance, _groupByCapacity, null)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, DummyFunc.Instance, _groupByCapacity, EqualityComparer.Default).Subscribe(null)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc.Instance, DummyFunc, IObservable>.Instance)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func), DummyFunc, IObservable>.Instance)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, default(Func, IObservable>))); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, DummyFunc.Instance, -1, EqualityComparer.Default)); + } - ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc, IObservable>.Instance, EqualityComparer.Default)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc, IObservable>.Instance, EqualityComparer.Default)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func, IObservable>), EqualityComparer.Default)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, default(IEqualityComparer))); + [TestMethod] + public void GroupBy_Capacity_KeyEle_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).GroupBy(DummyFunc.Instance, DummyFunc.Instance, _groupByCapacity)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy((Func)null, DummyFunc.Instance, _groupByCapacity)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, (Func)null, _groupByCapacity)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, DummyFunc.Instance, _groupByCapacity).Subscribe(null)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc, IObservable>.Instance)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc, IObservable>.Instance)); - ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func, IObservable>))); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, DummyFunc.Instance, -1)); } [TestMethod] - public void GroupByUntil_WithKeyComparer() + public void GroupBy_Capacity_KeyComparer_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).GroupBy(DummyFunc.Instance, _groupByCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy((Func)null, _groupByCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, _groupByCapacity, (IEqualityComparer)null)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, _groupByCapacity, EqualityComparer.Default).Subscribe(null)); + + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, -1, EqualityComparer.Default)); + } + + [TestMethod] + public void GroupBy_Capacity_Key_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).GroupBy(DummyFunc.Instance, _groupByCapacity)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy((Func)null, _groupByCapacity)); + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, _groupByCapacity).Subscribe(null)); + + ReactiveAssert.Throws(() => DummyObservable.Instance.GroupBy(DummyFunc.Instance, -1)); + } + + [TestMethod] + public void GroupBy_Capacity_WithKeyComparer() { var scheduler = new TestScheduler(); @@ -2611,15 +2633,11 @@ namespace ReactiveTests.Tests var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.GroupByUntil( - x => - { - keyInvoked++; - return x.Trim(); - }, - g => g.Skip(2), - comparer - ).Select(g => g.Key) + xs.GroupBy(x => + { + keyInvoked++; + return x.Trim(); + }, _groupByCapacity, comparer).Select(g => g.Key) ); res.Messages.AssertEqual( @@ -2627,7 +2645,6 @@ namespace ReactiveTests.Tests OnNext(270, "baR"), OnNext(350, "Baz"), OnNext(360, "qux"), - OnNext(470, "FOO"), OnCompleted(570) ); @@ -2639,7 +2656,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Outer_Complete() + public void GroupBy_Capacity_Outer_Complete() { var scheduler = new TestScheduler(); @@ -2671,7 +2688,7 @@ namespace ReactiveTests.Tests var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.GroupByUntil( + xs.GroupBy( x => { keyInvoked++; @@ -2682,7 +2699,7 @@ namespace ReactiveTests.Tests eleInvoked++; return Reverse(x); }, - g => g.Skip(2), + _groupByCapacity, comparer ).Select(g => g.Key) ); @@ -2692,7 +2709,6 @@ namespace ReactiveTests.Tests OnNext(270, "baR"), OnNext(350, "Baz"), OnNext(360, "qux"), - OnNext(470, "FOO"), OnCompleted(570) ); @@ -2705,7 +2721,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Outer_Error() + public void GroupBy_Capacity_Outer_Error() { var scheduler = new TestScheduler(); @@ -2738,7 +2754,7 @@ namespace ReactiveTests.Tests var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.GroupByUntil( + xs.GroupBy( x => { keyInvoked++; @@ -2749,7 +2765,7 @@ namespace ReactiveTests.Tests eleInvoked++; return Reverse(x); }, - g => g.Skip(2), + _groupByCapacity, comparer ).Select(g => g.Key) ); @@ -2759,7 +2775,6 @@ namespace ReactiveTests.Tests OnNext(270, "baR"), OnNext(350, "Baz"), OnNext(360, "qux"), - OnNext(470, "FOO"), OnError(570, ex) ); @@ -2772,7 +2787,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Outer_Dispose() + public void GroupBy_Capacity_Outer_Dispose() { var scheduler = new TestScheduler(); @@ -2804,19 +2819,16 @@ namespace ReactiveTests.Tests var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.GroupByUntil( + xs.GroupBy( x => { keyInvoked++; return x.Trim(); - }, - x => + }, x => { eleInvoked++; return Reverse(x); - }, - g => g.Skip(2), - comparer + }, _groupByCapacity, comparer ).Select(g => g.Key), 355 ); @@ -2836,7 +2848,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Outer_KeyThrow() + public void GroupBy_Capacity_Outer_KeyThrow() { var scheduler = new TestScheduler(); @@ -2869,7 +2881,7 @@ namespace ReactiveTests.Tests var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.GroupByUntil( + xs.GroupBy( x => { keyInvoked++; @@ -2882,7 +2894,7 @@ namespace ReactiveTests.Tests eleInvoked++; return Reverse(x); }, - g => g.Skip(2), + _groupByCapacity, comparer ).Select(g => g.Key) ); @@ -2892,7 +2904,6 @@ namespace ReactiveTests.Tests OnNext(270, "baR"), OnNext(350, "Baz"), OnNext(360, "qux"), - OnNext(470, "FOO"), OnError(480, ex) ); @@ -2905,7 +2916,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Outer_EleThrow() + public void GroupBy_Capacity_Outer_EleThrow() { var scheduler = new TestScheduler(); @@ -2938,7 +2949,7 @@ namespace ReactiveTests.Tests var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.GroupByUntil( + xs.GroupBy( x => { keyInvoked++; @@ -2951,7 +2962,7 @@ namespace ReactiveTests.Tests throw ex; return Reverse(x); }, - g => g.Skip(2), + _groupByCapacity, comparer ).Select(g => g.Key) ); @@ -2961,7 +2972,6 @@ namespace ReactiveTests.Tests OnNext(270, "baR"), OnNext(350, "Baz"), OnNext(360, "qux"), - OnNext(470, "FOO"), OnError(480, ex) ); @@ -2974,7 +2984,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Outer_ComparerEqualsThrow() + public void GroupBy_Capacity_Outer_ComparerEqualsThrow() { var scheduler = new TestScheduler(); @@ -3006,7 +3016,7 @@ namespace ReactiveTests.Tests var comparer = new GroupByComparer(scheduler, 250, ushort.MaxValue); var res = scheduler.Start(() => - xs.GroupByUntil( + xs.GroupBy( x => { keyInvoked++; @@ -3017,7 +3027,7 @@ namespace ReactiveTests.Tests eleInvoked++; return Reverse(x); }, - g => g.Skip(2), + _groupByCapacity, comparer ).Select(g => g.Key) ); @@ -3037,7 +3047,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Outer_ComparerGetHashCodeThrow() + public void GroupBy_Capacity_Outer_ComparerGetHashCodeThrow() { var scheduler = new TestScheduler(); @@ -3069,7 +3079,7 @@ namespace ReactiveTests.Tests var comparer = new GroupByComparer(scheduler, ushort.MaxValue, 410); var res = scheduler.Start(() => - xs.GroupByUntil( + xs.GroupBy( x => { keyInvoked++; @@ -3080,7 +3090,7 @@ namespace ReactiveTests.Tests eleInvoked++; return Reverse(x); }, - g => g.Skip(2), + _groupByCapacity, comparer ).Select(g => g.Key) ); @@ -3102,7 +3112,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Inner_Complete() + public void GroupBy_Capacity_Inner_Complete() { var scheduler = new TestScheduler(); @@ -3135,7 +3145,7 @@ namespace ReactiveTests.Tests var innerSubscriptions = new Dictionary(); var res = new Dictionary>(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), x => Reverse(x), _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -3154,27 +3164,27 @@ namespace ReactiveTests.Tests scheduler.Start(); - Assert.AreEqual(5, inners.Count); + Assert.AreEqual(4, inners.Count); res["foo"].Messages.AssertEqual( - OnCompleted(320) + OnNext(470, " OOF"), + OnNext(530, " oOf "), + OnCompleted(570) ); res["baR"].Messages.AssertEqual( OnNext(390, "rab "), - OnCompleted(420) + OnNext(420, " RAB "), + OnCompleted(570) ); res["Baz"].Messages.AssertEqual( OnNext(480, " zab"), - OnCompleted(510) - ); - - res["qux"].Messages.AssertEqual( + OnNext(510, " ZAb "), OnCompleted(570) ); - res["FOO"].Messages.AssertEqual( + res["qux"].Messages.AssertEqual( OnCompleted(570) ); @@ -3184,7 +3194,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Inner_Complete_All() + public void GroupBy_Capacity_Inner_Complete_All() { var scheduler = new TestScheduler(); @@ -3217,7 +3227,7 @@ namespace ReactiveTests.Tests var innerSubscriptions = new Dictionary(); var res = new Dictionary>(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), x => Reverse(x), _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -3236,27 +3246,29 @@ namespace ReactiveTests.Tests scheduler.Start(); - Assert.AreEqual(5, inners.Count); + Assert.AreEqual(4, inners.Count); res["foo"].Messages.AssertEqual( OnNext(220, "oof "), OnNext(240, " OoF "), OnNext(310, " Oof"), - OnCompleted(310) + OnNext(470, " OOF"), + OnNext(530, " oOf "), + OnCompleted(570) ); res["baR"].Messages.AssertEqual( OnNext(270, " Rab"), OnNext(390, "rab "), OnNext(420, " RAB "), - OnCompleted(420) + OnCompleted(570) ); res["Baz"].Messages.AssertEqual( OnNext(350, " zaB "), OnNext(480, " zab"), OnNext(510, " ZAb "), - OnCompleted(510) + OnCompleted(570) ); res["qux"].Messages.AssertEqual( @@ -3264,19 +3276,13 @@ namespace ReactiveTests.Tests OnCompleted(570) ); - res["FOO"].Messages.AssertEqual( - OnNext(470, " OOF"), - OnNext(530, " oOf "), - OnCompleted(570) - ); - xs.Subscriptions.AssertEqual( Subscribe(200, 570) ); } [TestMethod] - public void GroupByUntil_Inner_Error() + public void GroupBy_Capacity_Inner_Error() { var scheduler = new TestScheduler(); @@ -3311,7 +3317,7 @@ namespace ReactiveTests.Tests var innerSubscriptions = new Dictionary(); var res = new Dictionary>(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), x => Reverse(x), _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -3330,27 +3336,27 @@ namespace ReactiveTests.Tests scheduler.Start(); - Assert.AreEqual(5, inners.Count); + Assert.AreEqual(4, inners.Count); res["foo"].Messages.AssertEqual( - OnCompleted(320) + OnNext(470, " OOF"), + OnNext(530, " oOf "), + OnError(570, ex1) ); res["baR"].Messages.AssertEqual( OnNext(390, "rab "), - OnCompleted(420) - ); + OnNext(420, " RAB "), + OnError(570, ex1) + ); res["Baz"].Messages.AssertEqual( OnNext(480, " zab"), - OnCompleted(510) - ); - - res["qux"].Messages.AssertEqual( + OnNext(510, " ZAb "), OnError(570, ex1) ); - res["FOO"].Messages.AssertEqual( + res["qux"].Messages.AssertEqual( OnError(570, ex1) ); @@ -3360,7 +3366,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Inner_Dispose() + public void GroupBy_Capacity_Inner_Dispose() { var scheduler = new TestScheduler(); @@ -3393,7 +3399,7 @@ namespace ReactiveTests.Tests var innerSubscriptions = new Dictionary(); var res = new Dictionary>(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), x => Reverse(x), _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -3417,8 +3423,7 @@ namespace ReactiveTests.Tests res["foo"].Messages.AssertEqual( OnNext(220, "oof "), OnNext(240, " OoF "), - OnNext(310, " Oof"), - OnCompleted(310) + OnNext(310, " Oof") ); res["baR"].Messages.AssertEqual( @@ -3440,10 +3445,12 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Inner_KeyThrow() + public void GroupBy_Capacity_Inner_KeyThrow() { var scheduler = new TestScheduler(); + var ex = new Exception(); + var xs = scheduler.CreateHotObservable( OnNext(90, "error"), OnNext(110, "error"), @@ -3474,15 +3481,14 @@ namespace ReactiveTests.Tests var res = new Dictionary>(); var keyInvoked = 0; - var ex = new Exception(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => { keyInvoked++; if (keyInvoked == 6) throw ex; return x.Trim(); - }, x => Reverse(x), g => g.Skip(2), comparer)); + }, x => Reverse(x), _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -3507,7 +3513,7 @@ namespace ReactiveTests.Tests OnNext(220, "oof "), OnNext(240, " OoF "), OnNext(310, " Oof"), - OnCompleted(310) + OnError(360, ex) ); res["baR"].Messages.AssertEqual( @@ -3526,10 +3532,12 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Inner_EleThrow() + public void GroupBy_Capacity_Inner_EleThrow() { var scheduler = new TestScheduler(); + var ex = new Exception(); + var xs = scheduler.CreateHotObservable( OnNext(90, "error"), OnNext(110, "error"), @@ -3560,15 +3568,14 @@ namespace ReactiveTests.Tests var res = new Dictionary>(); var eleInvoked = 0; - var ex = new Exception(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), x => { eleInvoked++; if (eleInvoked == 6) throw ex; return Reverse(x); - }, g => g.Skip(2), comparer)); + }, _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -3593,7 +3600,7 @@ namespace ReactiveTests.Tests OnNext(220, "oof "), OnNext(240, " OoF "), OnNext(310, " Oof"), - OnCompleted(310) + OnError(360, ex) ); res["baR"].Messages.AssertEqual( @@ -3616,7 +3623,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Inner_Comparer_EqualsThrow() + public void GroupBy_Capacity_Inner_Comparer_EqualsThrow() { var scheduler = new TestScheduler(); @@ -3649,7 +3656,7 @@ namespace ReactiveTests.Tests var innerSubscriptions = new Dictionary(); var res = new Dictionary>(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), x => Reverse(x), _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -3674,7 +3681,7 @@ namespace ReactiveTests.Tests OnNext(220, "oof "), OnNext(240, " OoF "), OnNext(310, " Oof"), - OnCompleted(310) + OnError(420, comparer.EqualsException) ); res["baR"].Messages.AssertEqual( @@ -3699,7 +3706,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Inner_Comparer_GetHashCodeThrow() + public void GroupBy_Capacity_Inner_Comparer_GetHashCodeThrow() { var scheduler = new TestScheduler(); @@ -3732,7 +3739,7 @@ namespace ReactiveTests.Tests var innerSubscriptions = new Dictionary(); var res = new Dictionary>(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), x => Reverse(x), _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -3757,7 +3764,7 @@ namespace ReactiveTests.Tests OnNext(220, "oof "), OnNext(240, " OoF "), OnNext(310, " Oof"), - OnCompleted(310) + OnError(420, comparer.HashCodeException) ); res["baR"].Messages.AssertEqual( @@ -3782,7 +3789,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Outer_Independence() + public void GroupBy_Capacity_Outer_Independence() { var scheduler = new TestScheduler(); @@ -3816,7 +3823,7 @@ namespace ReactiveTests.Tests var res = new Dictionary>(); var outerResults = scheduler.CreateObserver(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), x => Reverse(x), _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -3849,23 +3856,25 @@ namespace ReactiveTests.Tests OnNext(220, "oof "), OnNext(240, " OoF "), OnNext(310, " Oof"), - OnCompleted(310) + OnNext(470, " OOF"), + OnNext(530, " oOf "), + OnCompleted(570) ); res["baR"].Messages.AssertEqual( OnNext(270, " Rab"), OnNext(390, "rab "), OnNext(420, " RAB "), - OnCompleted(420) + OnCompleted(570) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 420) + Subscribe(200, 570) ); } [TestMethod] - public void GroupByUntil_Inner_Independence() + public void GroupBy_Capacity_Inner_Independence() { var scheduler = new TestScheduler(); @@ -3899,7 +3908,7 @@ namespace ReactiveTests.Tests var res = new Dictionary>(); var outerResults = scheduler.CreateObserver(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), x => Reverse(x), _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -3921,27 +3930,26 @@ namespace ReactiveTests.Tests scheduler.Start(); - Assert.AreEqual(5, inners.Count); + Assert.AreEqual(4, inners.Count); res["foo"].Messages.AssertEqual( OnNext(220, "oof "), OnNext(240, " OoF "), - OnNext(310, " Oof"), - OnCompleted(310) + OnNext(310, " Oof") ); res["baR"].Messages.AssertEqual( OnNext(270, " Rab"), OnNext(390, "rab "), OnNext(420, " RAB "), - OnCompleted(420) + OnCompleted(570) ); res["Baz"].Messages.AssertEqual( OnNext(350, " zaB "), OnNext(480, " zab"), OnNext(510, " ZAb "), - OnCompleted(510) + OnCompleted(570) ); res["qux"].Messages.AssertEqual( @@ -3949,19 +3957,13 @@ namespace ReactiveTests.Tests OnCompleted(570) ); - res["FOO"].Messages.AssertEqual( - OnNext(470, " OOF"), - OnNext(530, " oOf "), - OnCompleted(570) - ); - xs.Subscriptions.AssertEqual( Subscribe(200, 570) ); } [TestMethod] - public void GroupByUntil_Inner_Multiple_Independence() + public void GroupBy_Capacity_Inner_Multiple_Independence() { var scheduler = new TestScheduler(); @@ -3995,7 +3997,7 @@ namespace ReactiveTests.Tests var res = new Dictionary>(); var outerResults = scheduler.CreateObserver(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), x => Reverse(x), _groupByCapacity, comparer)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -4020,13 +4022,12 @@ namespace ReactiveTests.Tests scheduler.Start(); - Assert.AreEqual(5, inners.Count); + Assert.AreEqual(4, inners.Count); res["foo"].Messages.AssertEqual( OnNext(220, "oof "), OnNext(240, " OoF "), - OnNext(310, " Oof"), - OnCompleted(310) + OnNext(310, " Oof") ); res["baR"].Messages.AssertEqual( @@ -4041,19 +4042,13 @@ namespace ReactiveTests.Tests OnNext(360, " xuq ") ); - res["FOO"].Messages.AssertEqual( - OnNext(470, " OOF"), - OnNext(530, " oOf "), - OnCompleted(570) - ); - xs.Subscriptions.AssertEqual( Subscribe(200, 570) ); } [TestMethod] - public void GroupByUntil_Inner_Escape_Complete() + public void GroupBy_Capacity_Inner_Escape_Complete() { var scheduler = new TestScheduler(); @@ -4072,7 +4067,7 @@ namespace ReactiveTests.Tests var innerSubscription = default(IDisposable); var res = scheduler.CreateObserver(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), g => g.Skip(2))); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), _groupByCapacity)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -4099,7 +4094,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Inner_Escape_Error() + public void GroupBy_Capacity_Inner_Escape_Error() { var scheduler = new TestScheduler(); @@ -4120,7 +4115,7 @@ namespace ReactiveTests.Tests var innerSubscription = default(IDisposable); var res = scheduler.CreateObserver(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), g => g.Skip(2))); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), _groupByCapacity)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { @@ -4147,7 +4142,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Inner_Escape_Dispose() + public void GroupBy_Capacity_Inner_Escape_Dispose() { var scheduler = new TestScheduler(); @@ -4166,14 +4161,14 @@ namespace ReactiveTests.Tests var innerSubscription = default(IDisposable); var res = scheduler.CreateObserver(); - scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), g => g.Skip(2))); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupBy(x => x.Trim(), _groupByCapacity)); scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { inner = group; })); - scheduler.ScheduleAbsolute(290, () => outerSubscription.Dispose()); + scheduler.ScheduleAbsolute(400, () => outerSubscription.Dispose()); scheduler.ScheduleAbsolute(600, () => innerSubscription = inner.Subscribe(res)); @@ -4185,7 +4180,7 @@ namespace ReactiveTests.Tests scheduler.Start(); xs.Subscriptions.AssertEqual( - Subscribe(200, 290) + Subscribe(200, 400) ); res.Messages.AssertEqual( @@ -4193,113 +4188,60 @@ namespace ReactiveTests.Tests } [TestMethod] - public void GroupByUntil_Default() + public void GroupBy_Capacity_NullKeys_Simple() { var scheduler = new TestScheduler(); - var keyInvoked = 0; - var eleInvoked = 0; - var xs = scheduler.CreateHotObservable( - OnNext(90, "error"), - OnNext(110, "error"), - OnNext(130, "error"), - OnNext(220, " foo"), - OnNext(240, " FoO "), - OnNext(270, "baR "), - OnNext(310, "foO "), - OnNext(350, " Baz "), - OnNext(360, " qux "), - OnNext(390, " bar"), - OnNext(420, " BAR "), - OnNext(470, "FOO "), - OnNext(480, "baz "), - OnNext(510, " bAZ "), - OnNext(530, " fOo "), - OnCompleted(570), - OnNext(580, "error"), - OnCompleted(600), - OnError(650, new Exception()) + OnNext(220, "bar"), + OnNext(240, "foo"), + OnNext(310, "qux"), + OnNext(470, "baz"), + OnCompleted(500) ); - var res = scheduler.Start(() => - xs.GroupByUntil( - x => - { - keyInvoked++; - return x.Trim().ToLower(); - }, - x => - { - eleInvoked++; - return Reverse(x); - }, - g => g.Skip(2) - ).Select(g => g.Key) - ); + var res = scheduler.Start(() => xs.GroupBy(x => x[0] == 'b' ? null : x.ToUpper(), _groupByCapacity).SelectMany(g => g, (g, x) => (g.Key ?? "(null)") + x)); res.Messages.AssertEqual( - OnNext(220, "foo"), - OnNext(270, "bar"), - OnNext(350, "baz"), - OnNext(360, "qux"), - OnNext(470, "foo"), - OnCompleted(570) + OnNext(220, "(null)bar"), + OnNext(240, "FOOfoo"), + OnNext(310, "QUXqux"), + OnNext(470, "(null)baz"), + OnCompleted(500) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 570) + Subscribe(200, 500) ); - - Assert.AreEqual(12, keyInvoked); - Assert.AreEqual(12, eleInvoked); } [TestMethod] - public void GroupByUntil_DurationSelector_Throws() + public void GroupBy_Capacity_NullKeys_Error() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, "foo") - ); - var ex = new Exception(); - var res = scheduler.Start(() => - xs.GroupByUntil(x => x, g => { throw ex; }) - ); - - res.Messages.AssertEqual( - OnError>(210, ex) - ); - - xs.Subscriptions.AssertEqual( - Subscribe(200, 210) - ); - } - - [TestMethod] - public void GroupByUntil_NullKeys_Simple_Never() - { - var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( OnNext(220, "bar"), OnNext(240, "foo"), OnNext(310, "qux"), OnNext(470, "baz"), - OnCompleted(500) + OnError(500, ex) ); - var res = scheduler.Start(() => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => Observable.Never()).SelectMany(g => g, (g, x) => (g.Key ?? "(null)") + x)); + var nullGroup = scheduler.CreateObserver(); + var err = default(Exception); - res.Messages.AssertEqual( - OnNext(220, "(null)bar"), - OnNext(240, "FOOfoo"), - OnNext(310, "QUXqux"), - OnNext(470, "(null)baz"), - OnCompleted(500) + scheduler.ScheduleAbsolute(200, () => xs.GroupBy(x => x[0] == 'b' ? null : x.ToUpper(), _groupByCapacity).Where(g => g.Key == null).Subscribe(g => g.Subscribe(nullGroup), ex_ => err = ex_)); + scheduler.Start(); + + Assert.AreSame(ex, err); + + nullGroup.Messages.AssertEqual( + OnNext(220, "bar"), + OnNext(470, "baz"), + OnError(500, ex) ); xs.Subscriptions.AssertEqual( @@ -4307,6070 +4249,12740 @@ namespace ReactiveTests.Tests ); } - [TestMethod] - public void GroupByUntil_NullKeys_Simple_Expire1() - { - var scheduler = new TestScheduler(); + #endregion - var xs = scheduler.CreateHotObservable( - OnNext(220, "bar"), - OnNext(240, "foo"), - OnNext(310, "qux"), - OnNext(470, "baz"), - OnCompleted(500) - ); + #region + GroupByUntil + - var n = 0; - var res = scheduler.Start(() => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => { if (g.Key == null) n++; return Observable.Timer(TimeSpan.FromTicks(50), scheduler); }).SelectMany(g => g, (g, x) => (g.Key ?? "(null)") + x)); + [TestMethod] + public void GroupByUntil_ArgumentChecking() + { + ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc.Instance, DummyFunc, IObservable>.Instance, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func), DummyFunc, IObservable>.Instance, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, default(Func, IObservable>), EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, default(IEqualityComparer))); - Assert.AreEqual(2, n); + ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc.Instance, DummyFunc, IObservable>.Instance)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func), DummyFunc, IObservable>.Instance)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, default(Func, IObservable>))); - res.Messages.AssertEqual( - OnNext(220, "(null)bar"), - OnNext(240, "FOOfoo"), - OnNext(310, "QUXqux"), - OnNext(470, "(null)baz"), - OnCompleted(500) - ); + ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc, IObservable>.Instance, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc, IObservable>.Instance, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func, IObservable>), EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, default(IEqualityComparer))); - xs.Subscriptions.AssertEqual( - Subscribe(200, 500) - ); + ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc, IObservable>.Instance)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc, IObservable>.Instance)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func, IObservable>))); } [TestMethod] - public void GroupByUntil_NullKeys_Simple_Expire2() + public void GroupByUntil_WithKeyComparer() { var scheduler = new TestScheduler(); + var keyInvoked = 0; + var xs = scheduler.CreateHotObservable( - OnNext(220, "bar"), - OnNext(240, "foo"), - OnNext(310, "qux"), - OnNext(470, "baz"), - OnCompleted(500) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var n = 0; - var res = scheduler.Start(() => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => { if (g.Key == null) n++; return Observable.Timer(TimeSpan.FromTicks(50), scheduler).IgnoreElements(); }).SelectMany(g => g, (g, x) => (g.Key ?? "(null)") + x)); + var comparer = new GroupByComparer(scheduler); - Assert.AreEqual(2, n); + var res = scheduler.Start(() => + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + g => g.Skip(2), + comparer + ).Select(g => g.Key) + ); res.Messages.AssertEqual( - OnNext(220, "(null)bar"), - OnNext(240, "FOOfoo"), - OnNext(310, "QUXqux"), - OnNext(470, "(null)baz"), - OnCompleted(500) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnNext(470, "FOO"), + OnCompleted(570) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 500) + Subscribe(200, 570) ); + + Assert.AreEqual(12, keyInvoked); } [TestMethod] - public void GroupByUntil_NullKeys_Error() + public void GroupByUntil_Outer_Complete() { var scheduler = new TestScheduler(); - var ex = new Exception(); + var keyInvoked = 0; + var eleInvoked = 0; var xs = scheduler.CreateHotObservable( - OnNext(220, "bar"), - OnNext(240, "foo"), - OnNext(310, "qux"), - OnNext(470, "baz"), - OnError(500, ex) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var nullGroup = scheduler.CreateObserver(); - var err = default(Exception); - - scheduler.ScheduleAbsolute(200, () => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => Observable.Never()).Where(g => g.Key == null).Subscribe(g => g.Subscribe(nullGroup), ex_ => err = ex_)); - scheduler.Start(); + var comparer = new GroupByComparer(scheduler); - Assert.AreSame(ex, err); + var res = scheduler.Start(() => + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + comparer + ).Select(g => g.Key) + ); - nullGroup.Messages.AssertEqual( - OnNext(220, "bar"), - OnNext(470, "baz"), - OnError(500, ex) + res.Messages.AssertEqual( + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnNext(470, "FOO"), + OnCompleted(570) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 500) + Subscribe(200, 570) ); - } - - #endregion - - #region + GroupJoin + - [TestMethod] - public void GroupJoinOp_ArgumentChecking() - { - ReactiveAssert.Throws(() => Observable.GroupJoin(null, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc, int>.Instance)); - ReactiveAssert.Throws(() => Observable.GroupJoin(DummyObservable.Instance, null, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc, int>.Instance)); - ReactiveAssert.Throws(() => Observable.GroupJoin(DummyObservable.Instance, DummyObservable.Instance, default(Func>), DummyFunc>.Instance, DummyFunc, int>.Instance)); - ReactiveAssert.Throws(() => Observable.GroupJoin(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, default(Func>), DummyFunc, int>.Instance)); - ReactiveAssert.Throws(() => Observable.GroupJoin(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, default(Func, int>))); - ReactiveAssert.Throws(() => Observable.GroupJoin(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc, int>.Instance).Subscribe(null)); + Assert.AreEqual(12, keyInvoked); + Assert.AreEqual(12, eleInvoked); } [TestMethod] - public void GroupJoinOp_Normal_I() + public void GroupByUntil_Outer_Error() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(280))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); + var keyInvoked = 0; + var eleInvoked = 0; + var ex = new Exception(); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnError(570, ex), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var xsd = new List>(); - var ysd = new List>(); + var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + comparer + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnNext(830, "9rat"), - OnCompleted(990) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnNext(470, "FOO"), + OnError(570, ex) ); - AssertDurations(xs, xsd, 990); - AssertDurations(ys, ysd, 990); - -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - xs.Subscriptions.AssertEqual( - Subscribe(200, 900) - ); -#else xs.Subscriptions.AssertEqual( - Subscribe(200, 990) + Subscribe(200, 570) ); -#endif -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - ys.Subscriptions.AssertEqual( - Subscribe(200, 800) - ); -#else - ys.Subscriptions.AssertEqual( - Subscribe(200, 990) - ); -#endif + Assert.AreEqual(12, keyInvoked); + Assert.AreEqual(12, eleInvoked); } [TestMethod] - public void GroupJoinOp_Normal_II() + public void GroupByUntil_Outer_Dispose() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnCompleted>(721) - ); + var keyInvoked = 0; + var eleInvoked = 0; - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(990) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var xsd = new List>(); - var ysd = new List>(); + var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + comparer + ).Select(g => g.Key), + 355 ); res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnCompleted(910) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz") ); - AssertDurations(xs, xsd, 910); - AssertDurations(ys, ysd, 910); - -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior xs.Subscriptions.AssertEqual( - Subscribe(200, 721) - ); -#else - xs.Subscriptions.AssertEqual( - Subscribe(200, 910) + Subscribe(200, 355) ); -#endif - ys.Subscriptions.AssertEqual( - Subscribe(200, 910) - ); + Assert.AreEqual(5, keyInvoked); + Assert.AreEqual(5, eleInvoked); } [TestMethod] - public void GroupJoinOp_Normal_III() + public void GroupByUntil_Outer_KeyThrow() { var scheduler = new TestScheduler(); + var keyInvoked = 0; + var eleInvoked = 0; + var ex = new Exception(); + var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(280))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) - ); - - var xsd = new List>(); - var ysd = new List>(); + var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler).Where(_ => false), y => NewTimer(ysd, y.Interval, scheduler).Where(_ => false), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + xs.GroupByUntil( + x => + { + keyInvoked++; + if (keyInvoked == 10) + throw ex; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + comparer + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnNext(830, "9rat"), - OnCompleted(990) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnNext(470, "FOO"), + OnError(480, ex) ); - AssertDurations(xs, xsd, 990); - AssertDurations(ys, ysd, 990); - -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - xs.Subscriptions.AssertEqual( - Subscribe(200, 900) - ); -#else xs.Subscriptions.AssertEqual( - Subscribe(200, 990) + Subscribe(200, 480) ); -#endif -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - ys.Subscriptions.AssertEqual( - Subscribe(200, 800) - ); -#else - ys.Subscriptions.AssertEqual( - Subscribe(200, 990) - ); -#endif + Assert.AreEqual(10, keyInvoked); + Assert.AreEqual(9, eleInvoked); } [TestMethod] - public void GroupJoinOp_Normal_IV() + public void GroupByUntil_Outer_EleThrow() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnCompleted>(990) - ); + var keyInvoked = 0; + var eleInvoked = 0; + var ex = new Exception(); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(980) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var xsd = new List>(); - var ysd = new List>(); + var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + if (eleInvoked == 10) + throw ex; + return Reverse(x); + }, + g => g.Skip(2), + comparer + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnCompleted(990) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnNext(470, "FOO"), + OnError(480, ex) ); - AssertDurations(xs, xsd, 990); - AssertDurations(ys, ysd, 990); - xs.Subscriptions.AssertEqual( - Subscribe(200, 990) + Subscribe(200, 480) ); -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - ys.Subscriptions.AssertEqual( - Subscribe(200, 980) - ); -#else - ys.Subscriptions.AssertEqual( - Subscribe(200, 990) - ); -#endif + Assert.AreEqual(10, keyInvoked); + Assert.AreEqual(10, eleInvoked); } [TestMethod] - public void GroupJoinOp_Normal_V() + public void GroupByUntil_Outer_ComparerEqualsThrow() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnCompleted>(990) - ); + var keyInvoked = 0; + var eleInvoked = 0; - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(900) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var xsd = new List>(); - var ysd = new List>(); + var comparer = new GroupByComparer(scheduler, 250, ushort.MaxValue); var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() - ); - - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnCompleted(990) + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + comparer + ).Select(g => g.Key) ); - AssertDurations(xs, xsd, 990); - AssertDurations(ys, ysd, 990); + res.Messages.AssertEqual( + OnNext(220, "foo"), + OnNext(270, "baR"), + OnError(310, comparer.EqualsException) + ); xs.Subscriptions.AssertEqual( - Subscribe(200, 990) + Subscribe(200, 310) ); -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - ys.Subscriptions.AssertEqual( - Subscribe(200, 900) - ); -#else - ys.Subscriptions.AssertEqual( - Subscribe(200, 990) - ); -#endif + Assert.AreEqual(4, keyInvoked); + Assert.AreEqual(3, eleInvoked); } [TestMethod] - public void GroupJoinOp_Normal_VI() + public void GroupByUntil_Outer_ComparerGetHashCodeThrow() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(30))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(200))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(850) - ); + var keyInvoked = 0; + var eleInvoked = 0; - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(20))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(900) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var xsd = new List>(); - var ysd = new List>(); + var comparer = new GroupByComparer(scheduler, ushort.MaxValue, 410); var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + comparer + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnCompleted(920) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnError(420, comparer.HashCodeException) ); - AssertDurations(xs, xsd, 920); - AssertDurations(ys, ysd, 920); - -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - xs.Subscriptions.AssertEqual( - Subscribe(200, 850) - ); -#else xs.Subscriptions.AssertEqual( - Subscribe(200, 920) + Subscribe(200, 420) ); -#endif -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - ys.Subscriptions.AssertEqual( - Subscribe(200, 900) - ); -#else - ys.Subscriptions.AssertEqual( - Subscribe(200, 920) - ); -#endif + Assert.AreEqual(8, keyInvoked); + Assert.AreEqual(7, eleInvoked); } [TestMethod] - public void GroupJoinOp_Normal_VII() + public void GroupByUntil_Inner_Complete() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnCompleted>(210) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(20))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(900) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + scheduler.ScheduleRelative(100, () => innerSubscriptions[group.Key] = group.Subscribe(result)); + })); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.Start(); + + Assert.AreEqual(5, inners.Count); + + res["foo"].Messages.AssertEqual( + OnCompleted(320) ); - res.Messages.AssertEqual( - OnCompleted(210) + res["baR"].Messages.AssertEqual( + OnNext(390, "rab "), + OnCompleted(420) ); - AssertDurations(xs, xsd, 210); - AssertDurations(ys, ysd, 210); + res["Baz"].Messages.AssertEqual( + OnNext(480, " zab"), + OnCompleted(510) + ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 210) + res["qux"].Messages.AssertEqual( + OnCompleted(570) ); - ys.Subscriptions.AssertEqual( - Subscribe(200, 210) + res["FOO"].Messages.AssertEqual( + OnCompleted(570) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 570) ); } [TestMethod] - public void GroupJoinOp_Normal_VIII() + public void GroupByUntil_Inner_Complete_All() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(200))) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateHotObservable( - OnNext(220, new TimeInterval("hat", TimeSpan.FromTicks(100))), - OnCompleted>(230) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() - ); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + })); - res.Messages.AssertEqual( - OnNext(220, "0hat") - ); + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); - AssertDurations(xs, xsd, 1000); - AssertDurations(ys, ysd, 1000); + scheduler.Start(); - xs.Subscriptions.AssertEqual( - Subscribe(200, 1000) - ); + Assert.AreEqual(5, inners.Count); -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - ys.Subscriptions.AssertEqual( - Subscribe(200, 230) - ); -#else - ys.Subscriptions.AssertEqual( - Subscribe(200, 1000) + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); -#endif - } - - [TestMethod] - public void GroupJoinOp_Normal_IX() - { - var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab "), + OnNext(420, " RAB "), + OnCompleted(420) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnNext(480, " zab"), + OnNext(510, " ZAb "), + OnCompleted(510) ); - var xsd = new List>(); - var ysd = new List>(); - - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge(), - 713 + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq "), + OnCompleted(570) ); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man") + res["FOO"].Messages.AssertEqual( + OnNext(470, " OOF"), + OnNext(530, " oOf "), + OnCompleted(570) ); - AssertDurations(xs, xsd, 713); - AssertDurations(ys, ysd, 713); - xs.Subscriptions.AssertEqual( - Subscribe(200, 713) - ); - - ys.Subscriptions.AssertEqual( - Subscribe(200, 713) + Subscribe(200, 570) ); } [TestMethod] - public void GroupJoinOp_Error_I() + public void GroupByUntil_Inner_Error() { var scheduler = new TestScheduler(); - var ex = new Exception(); + var ex1 = new Exception(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnError>(310, ex) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnError(570, ex1), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + scheduler.ScheduleRelative(100, () => innerSubscriptions[group.Key] = group.Subscribe(result)); + }, ex => { })); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.Start(); + + Assert.AreEqual(5, inners.Count); + + res["foo"].Messages.AssertEqual( + OnCompleted(320) ); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnError(310, ex) + res["baR"].Messages.AssertEqual( + OnNext(390, "rab "), + OnCompleted(420) + ); + + res["Baz"].Messages.AssertEqual( + OnNext(480, " zab"), + OnCompleted(510) ); - AssertDurations(xs, xsd, 310); - AssertDurations(ys, ysd, 310); + res["qux"].Messages.AssertEqual( + OnError(570, ex1) + ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 310) + res["FOO"].Messages.AssertEqual( + OnError(570, ex1) ); - ys.Subscriptions.AssertEqual( - Subscribe(200, 310) + xs.Subscriptions.AssertEqual( + Subscribe(200, 570) ); } [TestMethod] - public void GroupJoinOp_Error_II() + public void GroupByUntil_Inner_Dispose() { var scheduler = new TestScheduler(); - var ex = new Exception(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnError>(722, ex) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + })); + + scheduler.ScheduleAbsolute(400, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.Start(); + + Assert.AreEqual(4, inners.Count); + + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnError(722, ex) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab ") ); - AssertDurations(xs, xsd, 722); - AssertDurations(ys, ysd, 722); + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB ") + ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 722) + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq ") ); - ys.Subscriptions.AssertEqual( - Subscribe(200, 722) + xs.Subscriptions.AssertEqual( + Subscribe(200, 400) ); } [TestMethod] - public void GroupJoinOp_Error_III() + public void GroupByUntil_Inner_KeyThrow() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); + var keyInvoked = 0; var ex = new Exception(); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => + { + keyInvoked++; + if (keyInvoked == 6) + throw ex; + return x.Trim(); + }, x => Reverse(x), g => g.Skip(2), comparer)); - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler).SelectMany(x.Value == 6 ? Observable.Throw(ex) : Observable.Empty()), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() - ); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, _ => { })); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnError(725, ex) + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.Start(); + + Assert.AreEqual(3, inners.Count); + + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - AssertDurations(xs, xsd, 725); - AssertDurations(ys, ysd, 725); + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnError(360, ex) + ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 725) + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnError(360, ex) ); - ys.Subscriptions.AssertEqual( - Subscribe(200, 725) + xs.Subscriptions.AssertEqual( + Subscribe(200, 360) ); } [TestMethod] - public void GroupJoinOp_Error_IV() + public void GroupByUntil_Inner_EleThrow() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); - - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(19))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ex = new Exception(); - - var xsd = new List>(); - var ysd = new List>(); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler).SelectMany(y.Value == "tin" ? Observable.Throw(ex) : Observable.Empty()), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() - ); + var eleInvoked = 0; + var ex = new Exception(); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnError(721, ex) - ); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => + { + eleInvoked++; + if (eleInvoked == 6) + throw ex; + return Reverse(x); + }, g => g.Skip(2), comparer)); - AssertDurations(xs, xsd, 721); - AssertDurations(ys, ysd, 721); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, _ => { })); - xs.Subscriptions.AssertEqual( - Subscribe(200, 721) - ); + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); - ys.Subscriptions.AssertEqual( - Subscribe(200, 721) - ); - } + scheduler.Start(); - [TestMethod] - public void GroupJoinOp_Error_V() - { - var scheduler = new TestScheduler(); + Assert.AreEqual(4, inners.Count); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnError(360, ex) ); - var ex = new Exception(); - - var ysd = new List>(); - - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => { if (x.Value >= 0) throw ex; return Observable.Empty(); }, y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnError(360, ex) ); - res.Messages.AssertEqual( - OnError(210, ex) + res["qux"].Messages.AssertEqual( + OnError(360, ex) ); - AssertDurations(ys, ysd, 210); - xs.Subscriptions.AssertEqual( - Subscribe(200, 210) - ); - - ys.Subscriptions.AssertEqual( - Subscribe(200, 210) + Subscribe(200, 360) ); } [TestMethod] - public void GroupJoinOp_Error_VI() + public void GroupByUntil_Inner_Comparer_EqualsThrow() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) - ); + var comparer = new GroupByComparer(scheduler, 400, ushort.MaxValue); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - var ex = new Exception(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); - var xsd = new List>(); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, _ => { })); - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => { if (y.Value.Length >= 0) throw ex; return Observable.Empty(); }, (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.Start(); + + Assert.AreEqual(4, inners.Count); + + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - res.Messages.AssertEqual( - OnError(215, ex) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab "), + OnError(420, comparer.EqualsException) ); - AssertDurations(xs, xsd, 215); + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnError(420, comparer.EqualsException) + ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 215) + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq "), + OnError(420, comparer.EqualsException) ); - ys.Subscriptions.AssertEqual( - Subscribe(200, 215) + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) ); } [TestMethod] - public void GroupJoinOp_Error_VII() + public void GroupByUntil_Inner_Comparer_GetHashCodeThrow() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); - - var ys = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ex = new Exception(); + var comparer = new GroupByComparer(scheduler, ushort.MaxValue, 400); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => { if (x.Value >= 0) throw ex; return yy.Select(y => x.Value + y.Value); }).Merge() + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, _ => { })); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.Start(); + + Assert.AreEqual(4, inners.Count); + + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - res.Messages.AssertEqual( - OnError(215, ex) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab "), + OnError(420, comparer.HashCodeException) ); -#if !NO_PERF // BREAKING CHANGE v2 > v1.x - Duration selector is now invoked before the result selector - AssertDurations(xs, xsd, 215); -#endif - AssertDurations(ys, ysd, 215); + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnError(420, comparer.HashCodeException) + ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 215) + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq "), + OnError(420, comparer.HashCodeException) ); - ys.Subscriptions.AssertEqual( - Subscribe(200, 215) + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) ); } [TestMethod] - public void GroupJoinOp_Error_VIII() + public void GroupByUntil_Outer_Independence() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); + var outerResults = scheduler.CreateObserver(); - var ex = new Exception(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + outerResults.OnNext(group.Key); + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, outerResults.OnError, outerResults.OnCompleted)); - var res = scheduler.Start(() => - xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => { if (x.Value >= 0) throw ex; return yy.Select(y => x.Value + y.Value); }).Merge() - ); + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); - res.Messages.AssertEqual( - OnError(210, ex) - ); + scheduler.ScheduleAbsolute(320, () => outerSubscription.Dispose()); -#if !NO_PERF // BREAKING CHANGE v2 > v1.x - Duration selector is now invoked before the result selector - AssertDurations(xs, xsd, 210); -#endif - AssertDurations(ys, ysd, 210); + scheduler.Start(); - xs.Subscriptions.AssertEqual( - Subscribe(200, 210) - ); + Assert.AreEqual(2, inners.Count); - ys.Subscriptions.AssertEqual( - Subscribe(200, 210) + outerResults.Messages.AssertEqual( + OnNext(220, "foo"), + OnNext(270, "baR") ); - } - #endregion + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) + ); - #region + Join + + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab "), + OnNext(420, " RAB "), + OnCompleted(420) + ); - [TestMethod] - public void JoinOp_ArgumentChecking() - { - ReactiveAssert.Throws(() => Observable.Join(null, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc.Instance)); - ReactiveAssert.Throws(() => Observable.Join(DummyObservable.Instance, null, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc.Instance)); - ReactiveAssert.Throws(() => Observable.Join(DummyObservable.Instance, DummyObservable.Instance, default(Func>), DummyFunc>.Instance, DummyFunc.Instance)); - ReactiveAssert.Throws(() => Observable.Join(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, default(Func>), DummyFunc.Instance)); - ReactiveAssert.Throws(() => Observable.Join(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, default(Func))); - ReactiveAssert.Throws(() => Observable.Join(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc.Instance).Subscribe(null)); + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) + ); } [TestMethod] - public void JoinOp_Normal_I() + public void GroupByUntil_Inner_Independence() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); - - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var xsd = new List>(); - var ysd = new List>(); - - var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); + var outerResults = scheduler.CreateObserver(); + + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); + + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + outerResults.OnNext(group.Key); + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, outerResults.OnError, outerResults.OnCompleted)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.ScheduleAbsolute(320, () => innerSubscriptions["foo"].Dispose()); + + scheduler.Start(); + + Assert.AreEqual(5, inners.Count); + + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnNext(830, "9rat"), - OnCompleted(900) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab "), + OnNext(420, " RAB "), + OnCompleted(420) ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 900) + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnNext(480, " zab"), + OnNext(510, " ZAb "), + OnCompleted(510) ); -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - ys.Subscriptions.AssertEqual( - Subscribe(200, 800) + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq "), + OnCompleted(570) ); -#else - ys.Subscriptions.AssertEqual( - Subscribe(200, 900) + + res["FOO"].Messages.AssertEqual( + OnNext(470, " OOF"), + OnNext(530, " oOf "), + OnCompleted(570) ); -#endif - AssertDurations(xs, xsd, 900); - AssertDurations(ys, ysd, 900); + xs.Subscriptions.AssertEqual( + Subscribe(200, 570) + ); } [TestMethod] - public void JoinOp_Normal_II() + public void GroupByUntil_Inner_Multiple_Independence() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnCompleted>(721) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(990) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); + var outerResults = scheduler.CreateObserver(); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), comparer)); - var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + outerResults.OnNext(group.Key); + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, outerResults.OnError, outerResults.OnCompleted)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.ScheduleAbsolute(320, () => innerSubscriptions["foo"].Dispose()); + scheduler.ScheduleAbsolute(280, () => innerSubscriptions["baR"].Dispose()); + scheduler.ScheduleAbsolute(355, () => innerSubscriptions["Baz"].Dispose()); + scheduler.ScheduleAbsolute(400, () => innerSubscriptions["qux"].Dispose()); + + scheduler.Start(); + + Assert.AreEqual(5, inners.Count); + + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnCompleted(910) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab") ); -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - xs.Subscriptions.AssertEqual( - Subscribe(200, 721) + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB ") ); -#else - xs.Subscriptions.AssertEqual( - Subscribe(200, 910) + + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq ") ); -#endif - ys.Subscriptions.AssertEqual( - Subscribe(200, 910) + res["FOO"].Messages.AssertEqual( + OnNext(470, " OOF"), + OnNext(530, " oOf "), + OnCompleted(570) ); - AssertDurations(xs, xsd, 910); - AssertDurations(ys, ysd, 910); + xs.Subscriptions.AssertEqual( + Subscribe(200, 570) + ); } [TestMethod] - public void JoinOp_Normal_III() + public void GroupByUntil_Inner_Escape_Complete() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(310, "foO "), + OnNext(470, "FOO "), + OnNext(530, " fOo "), + OnCompleted(570) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) - ); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inner = default(IObservable); + var innerSubscription = default(IDisposable); + var res = scheduler.CreateObserver(); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), g => g.Skip(2))); - var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler).Where(_ => false), y => NewTimer(ysd, y.Interval, scheduler).Where(_ => false), (x, y) => x.Value + y.Value) - ); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + inner = group; + })); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnNext(830, "9rat"), - OnCompleted(900) - ); + scheduler.ScheduleAbsolute(600, () => innerSubscription = inner.Subscribe(res)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + innerSubscription.Dispose(); + }); + + scheduler.Start(); xs.Subscriptions.AssertEqual( - Subscribe(200, 900) + Subscribe(200, 570) ); -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - ys.Subscriptions.AssertEqual( - Subscribe(200, 800) - ); -#else - ys.Subscriptions.AssertEqual( - Subscribe(200, 900) + res.Messages.AssertEqual( + OnCompleted(600) ); -#endif - - AssertDurations(xs, xsd, 900); - AssertDurations(ys, ysd, 900); } [TestMethod] - public void JoinOp_Normal_IV() + public void GroupByUntil_Inner_Escape_Error() { var scheduler = new TestScheduler(); + var ex = new Exception(); + var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnCompleted>(990) + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(310, "foO "), + OnNext(470, "FOO "), + OnNext(530, " fOo "), + OnError(570, ex) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(980) - ); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inner = default(IObservable); + var innerSubscription = default(IDisposable); + var res = scheduler.CreateObserver(); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), g => g.Skip(2))); - var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) - ); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + inner = group; + }, _ => { })); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnCompleted(980) - ); + scheduler.ScheduleAbsolute(600, () => innerSubscription = inner.Subscribe(res)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + innerSubscription.Dispose(); + }); + + scheduler.Start(); xs.Subscriptions.AssertEqual( - Subscribe(200, 980) + Subscribe(200, 570) ); - ys.Subscriptions.AssertEqual( - Subscribe(200, 980) + res.Messages.AssertEqual( + OnError(600, ex) ); - - AssertDurations(xs, xsd, 980); - AssertDurations(ys, ysd, 980); } [TestMethod] - public void JoinOp_Normal_V() + public void GroupByUntil_Inner_Escape_Dispose() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnCompleted>(990) + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(310, "foO "), + OnNext(470, "FOO "), + OnNext(530, " fOo "), + OnError(570, new Exception()) ); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(900) - ); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inner = default(IObservable); + var innerSubscription = default(IDisposable); + var res = scheduler.CreateObserver(); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), g => g.Skip(2))); - var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) - ); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + inner = group; + })); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnCompleted(922) - ); + scheduler.ScheduleAbsolute(290, () => outerSubscription.Dispose()); + + scheduler.ScheduleAbsolute(600, () => innerSubscription = inner.Subscribe(res)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + innerSubscription.Dispose(); + }); + + scheduler.Start(); xs.Subscriptions.AssertEqual( - Subscribe(200, 922) + Subscribe(200, 290) ); -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - ys.Subscriptions.AssertEqual( - Subscribe(200, 900) - ); -#else - ys.Subscriptions.AssertEqual( - Subscribe(200, 922) + res.Messages.AssertEqual( ); -#endif - - AssertDurations(xs, xsd, 922); - AssertDurations(ys, ysd, 922); } [TestMethod] - public void JoinOp_Normal_VI() + public void GroupByUntil_Default() { var scheduler = new TestScheduler(); + var keyInvoked = 0; + var eleInvoked = 0; + var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(30))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(200))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(850) - ); - - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(20))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(900) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var xsd = new List>(); - var ysd = new List>(); - var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim().ToLower(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2) + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnNext(732, "7wig"), - OnNext(732, "8wig"), - OnCompleted(900) + OnNext(220, "foo"), + OnNext(270, "bar"), + OnNext(350, "baz"), + OnNext(360, "qux"), + OnNext(470, "foo"), + OnCompleted(570) ); -#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior - xs.Subscriptions.AssertEqual( - Subscribe(200, 850) - ); -#else xs.Subscriptions.AssertEqual( - Subscribe(200, 900) - ); -#endif - - ys.Subscriptions.AssertEqual( - Subscribe(200, 900) + Subscribe(200, 570) ); - AssertDurations(xs, xsd, 900); - AssertDurations(ys, ysd, 900); + Assert.AreEqual(12, keyInvoked); + Assert.AreEqual(12, eleInvoked); } [TestMethod] - public void JoinOp_Normal_VII() + public void GroupByUntil_DurationSelector_Throws() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); - - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + OnNext(210, "foo") ); - var xsd = new List>(); - var ysd = new List>(); + var ex = new Exception(); var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value), - 713 + xs.GroupByUntil(x => x, g => { throw ex; }) ); res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man") + OnError>(210, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 713) - ); - - ys.Subscriptions.AssertEqual( - Subscribe(200, 713) + Subscribe(200, 210) ); - - AssertDurations(xs, xsd, 713); - AssertDurations(ys, ysd, 713); } [TestMethod] - public void JoinOp_Error_I() + public void GroupByUntil_NullKeys_Simple_Never() { var scheduler = new TestScheduler(); - var ex = new Exception(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnError>(310, ex) - ); - - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + OnNext(220, "bar"), + OnNext(240, "foo"), + OnNext(310, "qux"), + OnNext(470, "baz"), + OnCompleted(500) ); - var xsd = new List>(); - var ysd = new List>(); - - var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) - ); + var res = scheduler.Start(() => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => Observable.Never()).SelectMany(g => g, (g, x) => (g.Key ?? "(null)") + x)); res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnError(310, ex) + OnNext(220, "(null)bar"), + OnNext(240, "FOOfoo"), + OnNext(310, "QUXqux"), + OnNext(470, "(null)baz"), + OnCompleted(500) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 310) - ); - - ys.Subscriptions.AssertEqual( - Subscribe(200, 310) + Subscribe(200, 500) ); - - AssertDurations(xs, xsd, 310); - AssertDurations(ys, ysd, 310); } [TestMethod] - public void JoinOp_Error_II() + public void GroupByUntil_NullKeys_Simple_Expire1() { var scheduler = new TestScheduler(); - var ex = new Exception(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); - - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnError>(722, ex) + OnNext(220, "bar"), + OnNext(240, "foo"), + OnNext(310, "qux"), + OnNext(470, "baz"), + OnCompleted(500) ); - var xsd = new List>(); - var ysd = new List>(); + var n = 0; + var res = scheduler.Start(() => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => { if (g.Key == null) n++; return Observable.Timer(TimeSpan.FromTicks(50), scheduler); }).SelectMany(g => g, (g, x) => (g.Key ?? "(null)") + x)); - var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) - ); + Assert.AreEqual(2, n); res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnError(722, ex) + OnNext(220, "(null)bar"), + OnNext(240, "FOOfoo"), + OnNext(310, "QUXqux"), + OnNext(470, "(null)baz"), + OnCompleted(500) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 722) - ); - - ys.Subscriptions.AssertEqual( - Subscribe(200, 722) + Subscribe(200, 500) ); - - AssertDurations(xs, xsd, 722); - AssertDurations(ys, ysd, 722); } [TestMethod] - public void JoinOp_Error_III() + public void GroupByUntil_NullKeys_Simple_Expire2() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); - - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + OnNext(220, "bar"), + OnNext(240, "foo"), + OnNext(310, "qux"), + OnNext(470, "baz"), + OnCompleted(500) ); - var ex = new Exception(); - - var xsd = new List>(); - var ysd = new List>(); + var n = 0; + var res = scheduler.Start(() => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => { if (g.Key == null) n++; return Observable.Timer(TimeSpan.FromTicks(50), scheduler).IgnoreElements(); }).SelectMany(g => g, (g, x) => (g.Key ?? "(null)") + x)); - var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler).SelectMany(x.Value == 6 ? Observable.Throw(ex) : Observable.Empty()), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) - ); + Assert.AreEqual(2, n); res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnNext(722, "7rat"), - OnNext(722, "6rat"), - OnNext(722, "8rat"), - OnError(725, ex) + OnNext(220, "(null)bar"), + OnNext(240, "FOOfoo"), + OnNext(310, "QUXqux"), + OnNext(470, "(null)baz"), + OnCompleted(500) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 725) - ); - - ys.Subscriptions.AssertEqual( - Subscribe(200, 725) + Subscribe(200, 500) ); - - AssertDurations(xs, xsd, 725); - AssertDurations(ys, ysd, 725); } [TestMethod] - public void JoinOp_Error_IV() + public void GroupByUntil_NullKeys_Error() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); + var ex = new Exception(); - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(19))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + var xs = scheduler.CreateHotObservable( + OnNext(220, "bar"), + OnNext(240, "foo"), + OnNext(310, "qux"), + OnNext(470, "baz"), + OnError(500, ex) ); - var ex = new Exception(); + var nullGroup = scheduler.CreateObserver(); + var err = default(Exception); - var xsd = new List>(); - var ysd = new List>(); + scheduler.ScheduleAbsolute(200, () => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => Observable.Never()).Where(g => g.Key == null).Subscribe(g => g.Subscribe(nullGroup), ex_ => err = ex_)); + scheduler.Start(); - var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler).SelectMany(y.Value == "tin" ? Observable.Throw(ex) : Observable.Empty()), (x, y) => x.Value + y.Value) - ); + Assert.AreSame(ex, err); - res.Messages.AssertEqual( - OnNext(215, "0hat"), - OnNext(217, "0bat"), - OnNext(219, "1hat"), - OnNext(300, "3wag"), - OnNext(300, "3pig"), - OnNext(305, "3cup"), - OnNext(310, "4wag"), - OnNext(310, "4pig"), - OnNext(310, "4cup"), - OnNext(702, "6tin"), - OnNext(710, "7tin"), - OnNext(712, "7man"), - OnNext(712, "6man"), - OnNext(720, "8tin"), - OnNext(720, "8man"), - OnError(721, ex) + nullGroup.Messages.AssertEqual( + OnNext(220, "bar"), + OnNext(470, "baz"), + OnError(500, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 721) + Subscribe(200, 500) ); + } - ys.Subscriptions.AssertEqual( - Subscribe(200, 721) - ); + #endregion - AssertDurations(xs, xsd, 721); - AssertDurations(ys, ysd, 721); + #region + GroupByUntil w/capacity + + + private const int _groupByUntilCapacity = 1024; + + [TestMethod] + public void GroupByUntil_Capacity_ArgumentChecking() + { + ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, _groupByUntilCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc.Instance, DummyFunc, IObservable>.Instance, _groupByUntilCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func), DummyFunc, IObservable>.Instance, _groupByUntilCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, default(Func, IObservable>), _groupByUntilCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, _groupByUntilCapacity, default(IEqualityComparer))); + + ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, _groupByUntilCapacity)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc.Instance, DummyFunc, IObservable>.Instance, _groupByUntilCapacity)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func), DummyFunc, IObservable>.Instance, _groupByUntilCapacity)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, default(Func, IObservable>), _groupByUntilCapacity)); + + ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc, IObservable>.Instance, _groupByUntilCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc, IObservable>.Instance, _groupByUntilCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func, IObservable>), _groupByUntilCapacity, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, _groupByUntilCapacity, default(IEqualityComparer))); + + ReactiveAssert.Throws(() => Observable.GroupByUntil(default(IObservable), DummyFunc.Instance, DummyFunc, IObservable>.Instance, _groupByUntilCapacity)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, default(Func), DummyFunc, IObservable>.Instance, _groupByUntilCapacity)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, default(Func, IObservable>), _groupByUntilCapacity)); + + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, -1, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, -1)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, -1, EqualityComparer.Default)); + ReactiveAssert.Throws(() => Observable.GroupByUntil(DummyObservable.Instance, DummyFunc.Instance, DummyFunc, IObservable>.Instance, -1)); } [TestMethod] - public void JoinOp_Error_V() + public void GroupByUntil_Capacity_WithKeyComparer() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); + var keyInvoked = 0; - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ex = new Exception(); - - var ysd = new List>(); + var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.Join(ys, x => { if (x.Value >= 0) throw ex; return Observable.Empty(); }, y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + g => g.Skip(2), + _groupByUntilCapacity, + comparer + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnError(210, ex) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnNext(470, "FOO"), + OnCompleted(570) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 210) + Subscribe(200, 570) ); - ys.Subscriptions.AssertEqual( - Subscribe(200, 210) - ); - - AssertDurations(ys, ysd, 210); + Assert.AreEqual(12, keyInvoked); } [TestMethod] - public void JoinOp_Error_VI() + public void GroupByUntil_Capacity_Outer_Complete() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); + var keyInvoked = 0; + var eleInvoked = 0; - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ex = new Exception(); - - var xsd = new List>(); + var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => { if (y.Value.Length >= 0) throw ex; return Observable.Empty(); }, (x, y) => x.Value + y.Value) + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + _groupByUntilCapacity, + comparer + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnError(215, ex) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnNext(470, "FOO"), + OnCompleted(570) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 215) - ); - - ys.Subscriptions.AssertEqual( - Subscribe(200, 215) + Subscribe(200, 570) ); - AssertDurations(xs, xsd, 215); + Assert.AreEqual(12, keyInvoked); + Assert.AreEqual(12, eleInvoked); } [TestMethod] - public void JoinOp_Error_VII() + public void GroupByUntil_Capacity_Outer_Error() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); + var keyInvoked = 0; + var eleInvoked = 0; + var ex = new Exception(); - var ys = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnError(570, ex), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ex = new Exception(); - - var xsd = new List>(); - var ysd = new List>(); + var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => { if (x.Value >= 0) throw ex; return x.Value + y.Value; }) + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + _groupByUntilCapacity, + comparer + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnError(215, ex) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnNext(470, "FOO"), + OnError(570, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 215) - ); - - ys.Subscriptions.AssertEqual( - Subscribe(200, 215) + Subscribe(200, 570) ); - AssertDurations(xs, xsd, 215); - AssertDurations(ys, ysd, 215); + Assert.AreEqual(12, keyInvoked); + Assert.AreEqual(12, eleInvoked); } [TestMethod] - public void JoinOp_Error_VIII() + public void GroupByUntil_Capacity_Outer_Dispose() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), - OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), - OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), - OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), - OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), - OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), - OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), - OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), - OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), - OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), - OnCompleted>(900) - ); + var keyInvoked = 0; + var eleInvoked = 0; - var ys = scheduler.CreateHotObservable( - OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), - OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), - OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), - OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), - OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), - OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), - OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), - OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), - OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), - OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), - OnCompleted>(800) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ex = new Exception(); - - var xsd = new List>(); - var ysd = new List>(); + var comparer = new GroupByComparer(scheduler); var res = scheduler.Start(() => - xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => { if (x.Value >= 0) throw ex; return x.Value + y.Value; }) + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + _groupByUntilCapacity, + comparer + ).Select(g => g.Key), + 355 ); res.Messages.AssertEqual( - OnError(215, ex) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz") ); xs.Subscriptions.AssertEqual( - Subscribe(200, 215) + Subscribe(200, 355) ); - ys.Subscriptions.AssertEqual( - Subscribe(200, 215) - ); - - AssertDurations(xs, xsd, 215); - AssertDurations(ys, ysd, 215); - } - - private ITestableObservable NewTimer(List> l, TimeSpan t, TestScheduler scheduler) - { - var timer = scheduler.CreateColdObservable(OnNext(t.Ticks, 0L), OnCompleted(t.Ticks)); - l.Add(timer); - return timer; - } - - private void AssertDurations(ITestableObservable> xs, List> xsd, long lastEnd) - { - Assert.AreEqual(xs.Messages.Where(x => x.Value.Kind == NotificationKind.OnNext && x.Time <= lastEnd).Count(), xsd.Count); - - foreach (var pair in xs.Messages.Zip(xsd, (x, y) => new { Item1 = x, Item2 = y })) - { - var start = pair.Item1.Time; - var end = Math.Min(start + pair.Item1.Value.Value.Interval.Ticks, lastEnd); - pair.Item2.Subscriptions.AssertEqual( - Subscribe(start, end) - ); - } - } - - #endregion - - #region + OfType + - - [TestMethod] - public void OfType_ArgumentChecking() - { - ReactiveAssert.Throws(() => Observable.OfType(default(IObservable))); - ReactiveAssert.Throws(() => Observable.OfType(DummyObservable.Instance).Subscribe(null)); - } + Assert.AreEqual(5, keyInvoked); + Assert.AreEqual(5, eleInvoked); + } [TestMethod] - public void OfType_Complete() + public void GroupByUntil_Capacity_Outer_KeyThrow() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new B(0)), - OnNext(220, new A(1)), - OnNext(230, new E(2)), - OnNext(240, new D(3)), - OnNext(250, new C(4)), - OnNext(260, new B(5)), - OnNext(270, new B(6)), - OnNext(280, new D(7)), - OnNext(290, new A(8)), - OnNext(300, new E(9)), - OnNext(310, 3), - OnNext(320, "foo"), - OnNext(330, true), - OnNext(340, new B(10)), - OnCompleted(350) + var keyInvoked = 0; + var eleInvoked = 0; + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); + var comparer = new GroupByComparer(scheduler); + var res = scheduler.Start(() => - xs.OfType() + xs.GroupByUntil( + x => + { + keyInvoked++; + if (keyInvoked == 10) + throw ex; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + _groupByUntilCapacity, + comparer + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnNext(210, new B(0)), - OnNext(240, new D(3)), - OnNext(260, new B(5)), - OnNext(270, new B(6)), - OnNext(280, new D(7)), - OnNext(340, new B(10)), - OnCompleted(350) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnNext(470, "FOO"), + OnError(480, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 350) + Subscribe(200, 480) ); + + Assert.AreEqual(10, keyInvoked); + Assert.AreEqual(9, eleInvoked); } [TestMethod] - public void OfType_Error() + public void GroupByUntil_Capacity_Outer_EleThrow() { var scheduler = new TestScheduler(); + var keyInvoked = 0; + var eleInvoked = 0; var ex = new Exception(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new B(0)), - OnNext(220, new A(1)), - OnNext(230, new E(2)), - OnNext(240, new D(3)), - OnNext(250, new C(4)), - OnNext(260, new B(5)), - OnNext(270, new B(6)), - OnNext(280, new D(7)), - OnNext(290, new A(8)), - OnNext(300, new E(9)), - OnNext(310, 3), - OnNext(320, "foo"), - OnNext(330, true), - OnNext(340, new B(10)), - OnError(350, ex) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); + var comparer = new GroupByComparer(scheduler); + var res = scheduler.Start(() => - xs.OfType() + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + if (eleInvoked == 10) + throw ex; + return Reverse(x); + }, + g => g.Skip(2), + _groupByUntilCapacity, + comparer + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnNext(210, new B(0)), - OnNext(240, new D(3)), - OnNext(260, new B(5)), - OnNext(270, new B(6)), - OnNext(280, new D(7)), - OnNext(340, new B(10)), - OnError(350, ex) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnNext(470, "FOO"), + OnError(480, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 350) + Subscribe(200, 480) ); + + Assert.AreEqual(10, keyInvoked); + Assert.AreEqual(10, eleInvoked); } [TestMethod] - public void OfType_Dispose() + public void GroupByUntil_Capacity_Outer_ComparerEqualsThrow() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(210, new B(0)), - OnNext(220, new A(1)), - OnNext(230, new E(2)), - OnNext(240, new D(3)), - OnNext(250, new C(4)), - OnNext(260, new B(5)), - OnNext(270, new B(6)), - OnNext(280, new D(7)), - OnNext(290, new A(8)), - OnNext(300, new E(9)), - OnNext(310, 3), - OnNext(320, "foo"), - OnNext(330, true), - OnNext(340, new B(10)), - OnError(350, new Exception()) + var keyInvoked = 0; + var eleInvoked = 0; + + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); + var comparer = new GroupByComparer(scheduler, 250, ushort.MaxValue); + var res = scheduler.Start(() => - xs.OfType(), - 275 + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + _groupByUntilCapacity, + comparer + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnNext(210, new B(0)), - OnNext(240, new D(3)), - OnNext(260, new B(5)), - OnNext(270, new B(6)) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnError(310, comparer.EqualsException) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 275) + Subscribe(200, 310) ); - } - - #endregion - - #region + Select + - - [TestMethod] - public void Select_ArgumentChecking() - { - ReactiveAssert.Throws(() => ((IObservable)null).Select(DummyFunc.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.Select((Func)null)); - ReactiveAssert.Throws(() => DummyObservable.Instance.Select(DummyFunc.Instance).Subscribe(null)); - } - [TestMethod] - public void Select_Throws() - { - ReactiveAssert.Throws(() => - Observable.Return(1).Select(x => x).Subscribe( - x => - { - throw new InvalidOperationException(); - })); - ReactiveAssert.Throws(() => - Observable.Throw(new Exception()).Select(x => x).Subscribe( - x => { }, - exception => - { - throw new InvalidOperationException(); - })); - ReactiveAssert.Throws(() => - Observable.Empty().Select(x => x).Subscribe( - x => { }, - exception => { }, - () => - { - throw new InvalidOperationException(); - })); - ReactiveAssert.Throws(() => Observable.Create(new Func, Action>(o => { throw new InvalidOperationException(); })).Select(x => x).Subscribe()); + Assert.AreEqual(4, keyInvoked); + Assert.AreEqual(3, eleInvoked); } [TestMethod] - public void Select_DisposeInsideSelector() + public void GroupByUntil_Capacity_Outer_ComparerGetHashCodeThrow() { var scheduler = new TestScheduler(); + var keyInvoked = 0; + var eleInvoked = 0; + var xs = scheduler.CreateHotObservable( - OnNext(100, 1), - OnNext(200, 2), - OnNext(500, 3), - OnNext(600, 4) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var invoked = 0; - - var res = scheduler.CreateObserver(); - - var d = new SerialDisposable(); - d.Disposable = xs.Select(x => - { - invoked++; - if (scheduler.Clock > 400) - d.Dispose(); - return x; - }).Subscribe(res); - - scheduler.ScheduleAbsolute(Disposed, d.Dispose); + var comparer = new GroupByComparer(scheduler, ushort.MaxValue, 410); - scheduler.Start(); + var res = scheduler.Start(() => + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + _groupByUntilCapacity, + comparer + ).Select(g => g.Key) + ); res.Messages.AssertEqual( - OnNext(100, 1), - OnNext(200, 2) + OnNext(220, "foo"), + OnNext(270, "baR"), + OnNext(350, "Baz"), + OnNext(360, "qux"), + OnError(420, comparer.HashCodeException) ); xs.Subscriptions.AssertEqual( - Subscribe(0, 500) + Subscribe(200, 420) ); - Assert.AreEqual(3, invoked); + Assert.AreEqual(8, keyInvoked); + Assert.AreEqual(7, eleInvoked); } [TestMethod] - public void Select_Completed() + public void GroupByUntil_Capacity_Inner_Complete() { var scheduler = new TestScheduler(); - var invoked = 0; - var xs = scheduler.CreateHotObservable( - OnNext(180, 1), - OnNext(210, 2), - OnNext(240, 3), - OnNext(290, 4), - OnNext(350, 5), - OnCompleted(400), - OnNext(410, -1), - OnCompleted(420), - OnError(430, new Exception()) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var res = scheduler.Start(() => - xs.Select(x => - { - invoked++; - return x + 1; - }) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - res.Messages.AssertEqual( - OnNext(210, 3), - OnNext(240, 4), - OnNext(290, 5), - OnNext(350, 6), - OnCompleted(400) - ); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), _groupByUntilCapacity, comparer)); - xs.Subscriptions.AssertEqual( - Subscribe(200, 400) - ); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + scheduler.ScheduleRelative(100, () => innerSubscriptions[group.Key] = group.Subscribe(result)); + })); - Assert.AreEqual(4, invoked); - } + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); - [TestMethod] - public void Select_NotCompleted() - { - var scheduler = new TestScheduler(); + scheduler.Start(); - var invoked = 0; + Assert.AreEqual(5, inners.Count); - var xs = scheduler.CreateHotObservable( - OnNext(180, 1), - OnNext(210, 2), - OnNext(240, 3), - OnNext(290, 4), - OnNext(350, 5) + res["foo"].Messages.AssertEqual( + OnCompleted(320) ); - var res = scheduler.Start(() => - xs.Select(x => - { - invoked++; - return x + 1; - }) + res["baR"].Messages.AssertEqual( + OnNext(390, "rab "), + OnCompleted(420) ); - res.Messages.AssertEqual( - OnNext(210, 3), - OnNext(240, 4), - OnNext(290, 5), - OnNext(350, 6) + res["Baz"].Messages.AssertEqual( + OnNext(480, " zab"), + OnCompleted(510) ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 1000) + res["qux"].Messages.AssertEqual( + OnCompleted(570) ); - Assert.AreEqual(4, invoked); + res["FOO"].Messages.AssertEqual( + OnCompleted(570) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 570) + ); } [TestMethod] - public void Select_Error() + public void GroupByUntil_Capacity_Inner_Complete_All() { var scheduler = new TestScheduler(); - var invoked = 0; + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) + ); - var ex = new Exception(); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - var xs = scheduler.CreateHotObservable( - OnNext(180, 1), - OnNext(210, 2), - OnNext(240, 3), - OnNext(290, 4), - OnNext(350, 5), - OnError(400, ex), - OnNext(410, -1), - OnCompleted(420), - OnError(430, new Exception()) - ); - - var res = scheduler.Start(() => - xs.Select(x => - { - invoked++; - return x + 1; - }) - ); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), _groupByUntilCapacity, comparer)); - res.Messages.AssertEqual( - OnNext(210, 3), - OnNext(240, 4), - OnNext(290, 5), - OnNext(350, 6), - OnError(400, ex) - ); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + })); - xs.Subscriptions.AssertEqual( - Subscribe(200, 400) - ); + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); - Assert.AreEqual(4, invoked); - } + scheduler.Start(); - [TestMethod] - public void Select_SelectorThrows() - { - var scheduler = new TestScheduler(); + Assert.AreEqual(5, inners.Count); - var invoked = 0; + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) + ); - var xs = scheduler.CreateHotObservable( - OnNext(180, 1), - OnNext(210, 2), - OnNext(240, 3), - OnNext(290, 4), - OnNext(350, 5), - OnCompleted(400), - OnNext(410, -1), - OnCompleted(420), - OnError(430, new Exception()) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab "), + OnNext(420, " RAB "), + OnCompleted(420) ); - var ex = new Exception(); + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnNext(480, " zab"), + OnNext(510, " ZAb "), + OnCompleted(510) + ); - var res = scheduler.Start(() => - xs.Select(x => - { - invoked++; - if (invoked == 3) - throw ex; - return x + 1; - }) + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq "), + OnCompleted(570) ); - res.Messages.AssertEqual( - OnNext(210, 3), - OnNext(240, 4), - OnError(290, ex) + res["FOO"].Messages.AssertEqual( + OnNext(470, " OOF"), + OnNext(530, " oOf "), + OnCompleted(570) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 290) + Subscribe(200, 570) ); - - Assert.AreEqual(3, invoked); - } - - [TestMethod] - public void SelectWithIndex_ArgumentChecking() - { - ReactiveAssert.Throws(() => ((IObservable)null).Select(DummyFunc.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.Select((Func)null)); - ReactiveAssert.Throws(() => DummyObservable.Instance.Select(DummyFunc.Instance).Subscribe(null)); - } - - [TestMethod] - public void SelectWithIndex_Throws() - { - ReactiveAssert.Throws(() => - Observable.Return(1).Select((x, index) => x).Subscribe( - x => - { - throw new InvalidOperationException(); - })); - ReactiveAssert.Throws(() => - Observable.Throw(new Exception()).Select((x, index) => x).Subscribe( - x => { }, - exception => - { - throw new InvalidOperationException(); - })); - ReactiveAssert.Throws(() => - Observable.Empty().Select((x, index) => x).Subscribe( - x => { }, - exception => { }, - () => - { - throw new InvalidOperationException(); - })); - ReactiveAssert.Throws(() => Observable.Create(new Func, Action>(o => { throw new InvalidOperationException(); })).Select((x, index) => x).Subscribe()); } [TestMethod] - public void SelectWithIndex_DisposeInsideSelector() + public void GroupByUntil_Capacity_Inner_Error() { var scheduler = new TestScheduler(); + var ex1 = new Exception(); + var xs = scheduler.CreateHotObservable( - OnNext(100, 4), - OnNext(200, 3), - OnNext(500, 2), - OnNext(600, 1) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnError(570, ex1), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var invoked = 0; + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - var res = scheduler.CreateObserver(); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), _groupByUntilCapacity, comparer)); - var d = new SerialDisposable(); - d.Disposable = xs.Select((x, index) => + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => { - invoked++; - if (scheduler.Clock > 400) - d.Dispose(); - return x + index * 10; - }).Subscribe(res); + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + scheduler.ScheduleRelative(100, () => innerSubscriptions[group.Key] = group.Subscribe(result)); + }, ex => { })); - scheduler.ScheduleAbsolute(Disposed, d.Dispose); + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); scheduler.Start(); - res.Messages.AssertEqual( - OnNext(100, 4), - OnNext(200, 13) - ); + Assert.AreEqual(5, inners.Count); - xs.Subscriptions.AssertEqual( - Subscribe(0, 500) + res["foo"].Messages.AssertEqual( + OnCompleted(320) ); - Assert.AreEqual(3, invoked); - } - - [TestMethod] - public void SelectWithIndex_Completed() - { - var scheduler = new TestScheduler(); - - var invoked = 0; + res["baR"].Messages.AssertEqual( + OnNext(390, "rab "), + OnCompleted(420) + ); - var xs = scheduler.CreateHotObservable( - OnNext(180, 5), - OnNext(210, 4), - OnNext(240, 3), - OnNext(290, 2), - OnNext(350, 1), - OnCompleted(400), - OnNext(410, -1), - OnCompleted(420), - OnError(430, new Exception()) + res["Baz"].Messages.AssertEqual( + OnNext(480, " zab"), + OnCompleted(510) ); - var res = scheduler.Start(() => - xs.Select((x, index) => - { - invoked++; - return (x + 1) + (index * 10); - }) + res["qux"].Messages.AssertEqual( + OnError(570, ex1) ); - res.Messages.AssertEqual( - OnNext(210, 5), - OnNext(240, 14), - OnNext(290, 23), - OnNext(350, 32), - OnCompleted(400) + res["FOO"].Messages.AssertEqual( + OnError(570, ex1) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 400) + Subscribe(200, 570) ); - - Assert.AreEqual(4, invoked); } [TestMethod] - public void SelectWithIndex_NotCompleted() + public void GroupByUntil_Capacity_Inner_Dispose() { var scheduler = new TestScheduler(); - var invoked = 0; - var xs = scheduler.CreateHotObservable( - OnNext(180, 5), - OnNext(210, 4), - OnNext(240, 3), - OnNext(290, 2), - OnNext(350, 1) - ); - - var res = scheduler.Start(() => - xs.Select((x, index) => - { - invoked++; - return (x + 1) + (index * 10); - }) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - res.Messages.AssertEqual( - OnNext(210, 5), - OnNext(240, 14), - OnNext(290, 23), - OnNext(350, 32) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - xs.Subscriptions.AssertEqual( - Subscribe(200, 1000) - ); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), _groupByUntilCapacity, comparer)); - Assert.AreEqual(4, invoked); - } + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + })); - [TestMethod] - public void SelectWithIndex_Error() - { - var scheduler = new TestScheduler(); + scheduler.ScheduleAbsolute(400, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); - var invoked = 0; - var ex = new Exception(); + scheduler.Start(); - var xs = scheduler.CreateHotObservable( - OnNext(180, 5), - OnNext(210, 4), - OnNext(240, 3), - OnNext(290, 2), - OnNext(350, 1), - OnError(400, ex), - OnNext(410, -1), - OnCompleted(420), - OnError(430, new Exception()) + Assert.AreEqual(4, inners.Count); + + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - var res = scheduler.Start(() => - xs.Select((x, index) => - { - invoked++; - return (x + 1) + (index * 10); - }) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab ") ); - res.Messages.AssertEqual( - OnNext(210, 5), - OnNext(240, 14), - OnNext(290, 23), - OnNext(350, 32), - OnError(400, ex) + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB ") + ); + + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq ") ); xs.Subscriptions.AssertEqual( Subscribe(200, 400) ); - - Assert.AreEqual(4, invoked); } [TestMethod] - public void SelectWithIndex_SelectorThrows() + public void GroupByUntil_Capacity_Inner_KeyThrow() { var scheduler = new TestScheduler(); - var invoked = 0; - var xs = scheduler.CreateHotObservable( - OnNext(180, 5), - OnNext(210, 4), - OnNext(240, 3), - OnNext(290, 2), - OnNext(350, 1), - OnCompleted(400), - OnNext(410, -1), - OnCompleted(420), - OnError(430, new Exception()) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); + + var keyInvoked = 0; var ex = new Exception(); - var res = scheduler.Start(() => - xs.Select((x, index) => - { - invoked++; - if (invoked == 3) - throw ex; - return (x + 1) + (index * 10); - }) - ); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => + { + keyInvoked++; + if (keyInvoked == 6) + throw ex; + return x.Trim(); + }, x => Reverse(x), g => g.Skip(2), _groupByUntilCapacity, comparer)); - res.Messages.AssertEqual( - OnNext(210, 5), - OnNext(240, 14), - OnError(290, ex) - ); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, _ => { })); - xs.Subscriptions.AssertEqual( - Subscribe(200, 290) - ); + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); - Assert.AreEqual(3, invoked); - } + scheduler.Start(); - [TestMethod] - public void Select_Select1() - { - var scheduler = new TestScheduler(); + Assert.AreEqual(3, inners.Count); - var xs = scheduler.CreateHotObservable( - OnNext(180, 5), - OnNext(210, 4), - OnNext(240, 3), - OnNext(290, 2), - OnNext(350, 1), - OnCompleted(400) + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - var res = scheduler.Start(() => - xs.Select(x => x + 1).Select(x => x - 2) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnError(360, ex) ); - res.Messages.AssertEqual( - OnNext(210, 4 + 1 - 2), - OnNext(240, 3 + 1 - 2), - OnNext(290, 2 + 1 - 2), - OnNext(350, 1 + 1 - 2), - OnCompleted(400) + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnError(360, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 400) + Subscribe(200, 360) ); } [TestMethod] - public void Select_Select2() + public void GroupByUntil_Capacity_Inner_EleThrow() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(180, 5), - OnNext(210, 4), - OnNext(240, 3), - OnNext(290, 2), - OnNext(350, 1), - OnCompleted(400) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var res = scheduler.Start(() => - xs.Select((x, i) => x + i).Select(x => x - 2) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - res.Messages.AssertEqual( - OnNext(210, 4 + 0 - 2), - OnNext(240, 3 + 1 - 2), - OnNext(290, 2 + 2 - 2), - OnNext(350, 1 + 3 - 2), - OnCompleted(400) - ); + var eleInvoked = 0; + var ex = new Exception(); - xs.Subscriptions.AssertEqual( - Subscribe(200, 400) - ); - } + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => + { + eleInvoked++; + if (eleInvoked == 6) + throw ex; + return Reverse(x); + }, g => g.Skip(2), _groupByUntilCapacity, comparer)); - [TestMethod] - public void Select_Select3() - { - var scheduler = new TestScheduler(); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, _ => { })); - var xs = scheduler.CreateHotObservable( - OnNext(180, 5), - OnNext(210, 4), - OnNext(240, 3), - OnNext(290, 2), - OnNext(350, 1), - OnCompleted(400) - ); + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); - var res = scheduler.Start(() => - xs.Select(x => x + 1).Select((x, i) => x - i) - ); + scheduler.Start(); - res.Messages.AssertEqual( - OnNext(210, 4 + 1 - 0), - OnNext(240, 3 + 1 - 1), - OnNext(290, 2 + 1 - 2), - OnNext(350, 1 + 1 - 3), - OnCompleted(400) - ); + Assert.AreEqual(4, inners.Count); - xs.Subscriptions.AssertEqual( - Subscribe(200, 400) + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - } - - [TestMethod] - public void Select_Select4() - { - var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(180, 5), - OnNext(210, 4), - OnNext(240, 3), - OnNext(290, 2), - OnNext(350, 1), - OnCompleted(400) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnError(360, ex) ); - var res = scheduler.Start(() => - xs.Select((x, i) => x + i).Select((x, i) => x - i) + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnError(360, ex) ); - res.Messages.AssertEqual( - OnNext(210, 4), - OnNext(240, 3), - OnNext(290, 2), - OnNext(350, 1), - OnCompleted(400) + res["qux"].Messages.AssertEqual( + OnError(360, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 400) + Subscribe(200, 360) ); } - #endregion - - #region + SelectMany + - - [TestMethod] - public void SelectMany_Then_ArgumentChecking() - { - ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyObservable.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(((IObservable)null))); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyObservable.Instance).Subscribe(null)); - } - [TestMethod] - public void SelectMany_Then_Complete_Complete() + public void GroupByUntil_Capacity_Inner_Comparer_EqualsThrow() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateColdObservable( - OnNext(100, 4), - OnNext(200, 2), - OnNext(300, 3), - OnNext(400, 1), - OnCompleted(500) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateColdObservable( - OnNext(50, "foo"), - OnNext(100, "bar"), - OnNext(150, "baz"), - OnNext(200, "qux"), - OnCompleted(250) - ); + var comparer = new GroupByComparer(scheduler, 400, ushort.MaxValue); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - var res = scheduler.Start(() => - xs.SelectMany(ys) - ); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), _groupByUntilCapacity, comparer)); - res.Messages.AssertEqual( - OnNext(350, "foo"), - OnNext(400, "bar"), - OnNext(450, "baz"), - OnNext(450, "foo"), - OnNext(500, "qux"), - OnNext(500, "bar"), - OnNext(550, "baz"), - OnNext(550, "foo"), - OnNext(600, "qux"), - OnNext(600, "bar"), - OnNext(650, "baz"), - OnNext(650, "foo"), - OnNext(700, "qux"), - OnNext(700, "bar"), - OnNext(750, "baz"), - OnNext(800, "qux"), - OnCompleted(850) - ); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, _ => { })); - xs.Subscriptions.AssertEqual( - Subscribe(200, 700) - ); + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); - ys.Subscriptions.AssertEqual( - Subscribe(300, 550), - Subscribe(400, 650), - Subscribe(500, 750), - Subscribe(600, 850) - ); - } + scheduler.Start(); - [TestMethod] - public void SelectMany_Then_Complete_Complete_2() - { - var scheduler = new TestScheduler(); + Assert.AreEqual(4, inners.Count); - var xs = scheduler.CreateColdObservable( - OnNext(100, 4), - OnNext(200, 2), - OnNext(300, 3), - OnNext(400, 1), - OnCompleted(700) + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - var ys = scheduler.CreateColdObservable( - OnNext(50, "foo"), - OnNext(100, "bar"), - OnNext(150, "baz"), - OnNext(200, "qux"), - OnCompleted(250) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab "), + OnError(420, comparer.EqualsException) ); - var res = scheduler.Start(() => - xs.SelectMany(ys) + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnError(420, comparer.EqualsException) ); - res.Messages.AssertEqual( - OnNext(350, "foo"), - OnNext(400, "bar"), - OnNext(450, "baz"), - OnNext(450, "foo"), - OnNext(500, "qux"), - OnNext(500, "bar"), - OnNext(550, "baz"), - OnNext(550, "foo"), - OnNext(600, "qux"), - OnNext(600, "bar"), - OnNext(650, "baz"), - OnNext(650, "foo"), - OnNext(700, "qux"), - OnNext(700, "bar"), - OnNext(750, "baz"), - OnNext(800, "qux"), - OnCompleted(900) + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq "), + OnError(420, comparer.EqualsException) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 900) - ); - - ys.Subscriptions.AssertEqual( - Subscribe(300, 550), - Subscribe(400, 650), - Subscribe(500, 750), - Subscribe(600, 850) + Subscribe(200, 420) ); } [TestMethod] - public void SelectMany_Then_Never_Complete() + public void GroupByUntil_Capacity_Inner_Comparer_GetHashCodeThrow() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateColdObservable( - OnNext(100, 4), - OnNext(200, 2), - OnNext(300, 3), - OnNext(400, 1), - OnNext(500, 5), - OnNext(700, 0) - ); - - var ys = scheduler.CreateColdObservable( - OnNext(50, "foo"), - OnNext(100, "bar"), - OnNext(150, "baz"), - OnNext(200, "qux"), - OnCompleted(250) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var res = scheduler.Start(() => - xs.SelectMany(ys) - ); + var comparer = new GroupByComparer(scheduler, ushort.MaxValue, 400); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); - res.Messages.AssertEqual( - OnNext(350, "foo"), - OnNext(400, "bar"), - OnNext(450, "baz"), - OnNext(450, "foo"), - OnNext(500, "qux"), - OnNext(500, "bar"), - OnNext(550, "baz"), - OnNext(550, "foo"), - OnNext(600, "qux"), - OnNext(600, "bar"), - OnNext(650, "baz"), - OnNext(650, "foo"), - OnNext(700, "qux"), - OnNext(700, "bar"), - OnNext(750, "baz"), - OnNext(750, "foo"), - OnNext(800, "qux"), - OnNext(800, "bar"), - OnNext(850, "baz"), - OnNext(900, "qux"), - OnNext(950, "foo") - ); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), _groupByUntilCapacity, comparer)); - xs.Subscriptions.AssertEqual( - Subscribe(200, 1000) - ); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, _ => { })); - ys.Subscriptions.AssertEqual( - Subscribe(300, 550), - Subscribe(400, 650), - Subscribe(500, 750), - Subscribe(600, 850), - Subscribe(700, 950), - Subscribe(900, 1000) - ); - } + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); - [TestMethod] - public void SelectMany_Then_Complete_Never() - { - var scheduler = new TestScheduler(); + scheduler.Start(); - var xs = scheduler.CreateColdObservable( - OnNext(100, 4), - OnNext(200, 2), - OnNext(300, 3), - OnNext(400, 1), - OnCompleted(500) - ); + Assert.AreEqual(4, inners.Count); - var ys = scheduler.CreateColdObservable( - OnNext(50, "foo"), - OnNext(100, "bar"), - OnNext(150, "baz"), - OnNext(200, "qux") + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - var res = scheduler.Start(() => - xs.SelectMany(ys) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab "), + OnError(420, comparer.HashCodeException) ); - res.Messages.AssertEqual( - OnNext(350, "foo"), - OnNext(400, "bar"), - OnNext(450, "baz"), - OnNext(450, "foo"), - OnNext(500, "qux"), - OnNext(500, "bar"), - OnNext(550, "baz"), - OnNext(550, "foo"), - OnNext(600, "qux"), - OnNext(600, "bar"), - OnNext(650, "baz"), - OnNext(650, "foo"), - OnNext(700, "qux"), - OnNext(700, "bar"), - OnNext(750, "baz"), - OnNext(800, "qux") + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnError(420, comparer.HashCodeException) ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 700) + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq "), + OnError(420, comparer.HashCodeException) ); - ys.Subscriptions.AssertEqual( - Subscribe(300, 1000), - Subscribe(400, 1000), - Subscribe(500, 1000), - Subscribe(600, 1000) + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) ); } [TestMethod] - public void SelectMany_Then_Complete_Error() + public void GroupByUntil_Capacity_Outer_Independence() { var scheduler = new TestScheduler(); - var ex = new Exception(); - - var xs = scheduler.CreateColdObservable( - OnNext(100, 4), - OnNext(200, 2), - OnNext(300, 3), - OnNext(400, 1), - OnCompleted(500) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var ys = scheduler.CreateColdObservable( - OnNext(50, "foo"), - OnNext(100, "bar"), - OnNext(150, "baz"), - OnNext(200, "qux"), - OnError(300, ex) - ); + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); + var outerResults = scheduler.CreateObserver(); - var res = scheduler.Start(() => - xs.SelectMany(ys) + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), _groupByUntilCapacity, comparer)); + + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + outerResults.OnNext(group.Key); + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, outerResults.OnError, outerResults.OnCompleted)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.ScheduleAbsolute(320, () => outerSubscription.Dispose()); + + scheduler.Start(); + + Assert.AreEqual(2, inners.Count); + + outerResults.Messages.AssertEqual( + OnNext(220, "foo"), + OnNext(270, "baR") ); - res.Messages.AssertEqual( - OnNext(350, "foo"), - OnNext(400, "bar"), - OnNext(450, "baz"), - OnNext(450, "foo"), - OnNext(500, "qux"), - OnNext(500, "bar"), - OnNext(550, "baz"), - OnNext(550, "foo"), - OnError(600, ex) + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 600) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab "), + OnNext(420, " RAB "), + OnCompleted(420) ); - ys.Subscriptions.AssertEqual( - Subscribe(300, 600), - Subscribe(400, 600), - Subscribe(500, 600), - Subscribe(600, 600) + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) ); } [TestMethod] - public void SelectMany_Then_Error_Complete() + public void GroupByUntil_Capacity_Inner_Independence() { var scheduler = new TestScheduler(); - var ex = new Exception(); - - var xs = scheduler.CreateColdObservable( - OnNext(100, 4), - OnNext(200, 2), - OnNext(300, 3), - OnNext(400, 1), - OnError(500, ex) - ); - - var ys = scheduler.CreateColdObservable( - OnNext(50, "foo"), - OnNext(100, "bar"), - OnNext(150, "baz"), - OnNext(200, "qux"), - OnCompleted(250) + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); - var res = scheduler.Start(() => - xs.SelectMany(ys) + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); + var outerResults = scheduler.CreateObserver(); + + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), _groupByUntilCapacity, comparer)); + + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + outerResults.OnNext(group.Key); + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, outerResults.OnError, outerResults.OnCompleted)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.ScheduleAbsolute(320, () => innerSubscriptions["foo"].Dispose()); + + scheduler.Start(); + + Assert.AreEqual(5, inners.Count); + + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - res.Messages.AssertEqual( - OnNext(350, "foo"), - OnNext(400, "bar"), - OnNext(450, "baz"), - OnNext(450, "foo"), - OnNext(500, "qux"), - OnNext(500, "bar"), - OnNext(550, "baz"), - OnNext(550, "foo"), - OnNext(600, "qux"), - OnNext(600, "bar"), - OnNext(650, "baz"), - OnNext(650, "foo"), - OnError(700, ex) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab"), + OnNext(390, "rab "), + OnNext(420, " RAB "), + OnCompleted(420) ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 700) + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB "), + OnNext(480, " zab"), + OnNext(510, " ZAb "), + OnCompleted(510) ); - ys.Subscriptions.AssertEqual( - Subscribe(300, 550), - Subscribe(400, 650), - Subscribe(500, 700), - Subscribe(600, 700) + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq "), + OnCompleted(570) + ); + + res["FOO"].Messages.AssertEqual( + OnNext(470, " OOF"), + OnNext(530, " oOf "), + OnCompleted(570) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 570) ); } [TestMethod] - public void SelectMany_Then_Error_Error() + public void GroupByUntil_Capacity_Inner_Multiple_Independence() { var scheduler = new TestScheduler(); - var ex = new Exception(); + var xs = scheduler.CreateHotObservable( + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) + ); - var xs = scheduler.CreateColdObservable( - OnNext(100, 4), - OnNext(200, 2), - OnNext(300, 3), - OnNext(400, 1), - OnError(500, new Exception()) + var comparer = new GroupByComparer(scheduler); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inners = new Dictionary>(); + var innerSubscriptions = new Dictionary(); + var res = new Dictionary>(); + var outerResults = scheduler.CreateObserver(); + + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), x => Reverse(x), g => g.Skip(2), _groupByUntilCapacity, comparer)); + + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + outerResults.OnNext(group.Key); + var result = scheduler.CreateObserver(); + inners[group.Key] = group; + res[group.Key] = result; + innerSubscriptions[group.Key] = group.Subscribe(result); + }, outerResults.OnError, outerResults.OnCompleted)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + foreach (var d in innerSubscriptions.Values) + d.Dispose(); + }); + + scheduler.ScheduleAbsolute(320, () => innerSubscriptions["foo"].Dispose()); + scheduler.ScheduleAbsolute(280, () => innerSubscriptions["baR"].Dispose()); + scheduler.ScheduleAbsolute(355, () => innerSubscriptions["Baz"].Dispose()); + scheduler.ScheduleAbsolute(400, () => innerSubscriptions["qux"].Dispose()); + + scheduler.Start(); + + Assert.AreEqual(5, inners.Count); + + res["foo"].Messages.AssertEqual( + OnNext(220, "oof "), + OnNext(240, " OoF "), + OnNext(310, " Oof"), + OnCompleted(310) ); - var ys = scheduler.CreateColdObservable( - OnNext(50, "foo"), - OnNext(100, "bar"), - OnNext(150, "baz"), - OnNext(200, "qux"), - OnError(250, ex) + res["baR"].Messages.AssertEqual( + OnNext(270, " Rab") ); - var res = scheduler.Start(() => - xs.SelectMany(ys) + res["Baz"].Messages.AssertEqual( + OnNext(350, " zaB ") ); - res.Messages.AssertEqual( - OnNext(350, "foo"), - OnNext(400, "bar"), - OnNext(450, "baz"), - OnNext(450, "foo"), - OnNext(500, "qux"), - OnNext(500, "bar"), - OnError(550, ex) + res["qux"].Messages.AssertEqual( + OnNext(360, " xuq ") ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 550) + res["FOO"].Messages.AssertEqual( + OnNext(470, " OOF"), + OnNext(530, " oOf "), + OnCompleted(570) ); - ys.Subscriptions.AssertEqual( - Subscribe(300, 550), - Subscribe(400, 550), - Subscribe(500, 550) + xs.Subscriptions.AssertEqual( + Subscribe(200, 570) ); } [TestMethod] - public void SelectMany_ArgumentChecking() + public void GroupByUntil_Capacity_Inner_Escape_Complete() { - ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance).Subscribe(null)); + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(310, "foO "), + OnNext(470, "FOO "), + OnNext(530, " fOo "), + OnCompleted(570) + ); + + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inner = default(IObservable); + var innerSubscription = default(IDisposable); + var res = scheduler.CreateObserver(); + + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), g => g.Skip(2), _groupByUntilCapacity)); + + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + inner = group; + })); + + scheduler.ScheduleAbsolute(600, () => innerSubscription = inner.Subscribe(res)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + innerSubscription.Dispose(); + }); + + scheduler.Start(); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 570) + ); + + res.Messages.AssertEqual( + OnCompleted(600) + ); } [TestMethod] - public void SelectMany_Complete() + public void GroupByUntil_Capacity_Inner_Escape_Error() { var scheduler = new TestScheduler(); + var ex = new Exception(); + var xs = scheduler.CreateHotObservable( - OnNext(5, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(105, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(300, scheduler.CreateColdObservable( - OnNext(10, 102), - OnNext(90, 103), - OnNext(110, 104), - OnNext(190, 105), - OnNext(440, 106), - OnCompleted(460))), - OnNext(400, scheduler.CreateColdObservable( - OnNext(180, 202), - OnNext(190, 203), - OnCompleted(205))), - OnNext(550, scheduler.CreateColdObservable( - OnNext(10, 301), - OnNext(50, 302), - OnNext(70, 303), - OnNext(260, 304), - OnNext(310, 305), - OnCompleted(410))), - OnNext(750, scheduler.CreateColdObservable( - OnCompleted(40))), - OnNext(850, scheduler.CreateColdObservable( - OnNext(80, 401), - OnNext(90, 402), - OnCompleted(100))), - OnCompleted>(900) + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(310, "foO "), + OnNext(470, "FOO "), + OnNext(530, " fOo "), + OnError(570, ex) ); - var res = scheduler.Start(() => - xs.SelectMany(x => x) + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inner = default(IObservable); + var innerSubscription = default(IDisposable); + var res = scheduler.CreateObserver(); + + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), g => g.Skip(2), _groupByUntilCapacity)); + + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + inner = group; + }, _ => { })); + + scheduler.ScheduleAbsolute(600, () => innerSubscription = inner.Subscribe(res)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + outerSubscription.Dispose(); + innerSubscription.Dispose(); + }); + + scheduler.Start(); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 570) ); res.Messages.AssertEqual( - OnNext(310, 102), - OnNext(390, 103), - OnNext(410, 104), - OnNext(490, 105), - OnNext(560, 301), - OnNext(580, 202), - OnNext(590, 203), - OnNext(600, 302), - OnNext(620, 303), - OnNext(740, 106), - OnNext(810, 304), - OnNext(860, 305), - OnNext(930, 401), - OnNext(940, 402), - OnCompleted(960) + OnError(600, ex) ); + } - xs.Subscriptions.AssertEqual( - Subscribe(200, 900)); + [TestMethod] + public void GroupByUntil_Capacity_Inner_Escape_Dispose() + { + var scheduler = new TestScheduler(); - xs.Messages[2].Value.Value.Subscriptions.AssertEqual( - Subscribe(300, 760)); + var xs = scheduler.CreateHotObservable( + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(310, "foO "), + OnNext(470, "FOO "), + OnNext(530, " fOo "), + OnError(570, new Exception()) + ); - xs.Messages[3].Value.Value.Subscriptions.AssertEqual( - Subscribe(400, 605)); + var outer = default(IObservable>); + var outerSubscription = default(IDisposable); + var inner = default(IObservable); + var innerSubscription = default(IDisposable); + var res = scheduler.CreateObserver(); - xs.Messages[4].Value.Value.Subscriptions.AssertEqual( - Subscribe(550, 960)); + scheduler.ScheduleAbsolute(Created, () => outer = xs.GroupByUntil(x => x.Trim(), g => g.Skip(2), _groupByUntilCapacity)); - xs.Messages[5].Value.Value.Subscriptions.AssertEqual( - Subscribe(750, 790)); + scheduler.ScheduleAbsolute(Subscribed, () => outerSubscription = outer.Subscribe(group => + { + inner = group; + })); - xs.Messages[6].Value.Value.Subscriptions.AssertEqual( - Subscribe(850, 950)); + scheduler.ScheduleAbsolute(290, () => outerSubscription.Dispose()); + + scheduler.ScheduleAbsolute(600, () => innerSubscription = inner.Subscribe(res)); + + scheduler.ScheduleAbsolute(Disposed, () => + { + innerSubscription.Dispose(); + }); + + scheduler.Start(); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 290) + ); + + res.Messages.AssertEqual( + ); } [TestMethod] - public void SelectMany_Complete_InnerNotComplete() + public void GroupByUntil_Capacity_Default() { var scheduler = new TestScheduler(); + var keyInvoked = 0; + var eleInvoked = 0; + var xs = scheduler.CreateHotObservable( - OnNext(5, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(105, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(300, scheduler.CreateColdObservable( - OnNext(10, 102), - OnNext(90, 103), - OnNext(110, 104), - OnNext(190, 105), - OnNext(440, 106), - OnCompleted(460))), - OnNext(400, scheduler.CreateColdObservable( - OnNext(180, 202), - OnNext(190, 203))), - OnNext(550, scheduler.CreateColdObservable( - OnNext(10, 301), - OnNext(50, 302), - OnNext(70, 303), - OnNext(260, 304), - OnNext(310, 305), - OnCompleted(410))), - OnNext(750, scheduler.CreateColdObservable( - OnCompleted(40))), - OnNext(850, scheduler.CreateColdObservable( - OnNext(80, 401), - OnNext(90, 402), - OnCompleted(100))), - OnCompleted>(900) + OnNext(90, "error"), + OnNext(110, "error"), + OnNext(130, "error"), + OnNext(220, " foo"), + OnNext(240, " FoO "), + OnNext(270, "baR "), + OnNext(310, "foO "), + OnNext(350, " Baz "), + OnNext(360, " qux "), + OnNext(390, " bar"), + OnNext(420, " BAR "), + OnNext(470, "FOO "), + OnNext(480, "baz "), + OnNext(510, " bAZ "), + OnNext(530, " fOo "), + OnCompleted(570), + OnNext(580, "error"), + OnCompleted(600), + OnError(650, new Exception()) ); var res = scheduler.Start(() => - xs.SelectMany(x => x) + xs.GroupByUntil( + x => + { + keyInvoked++; + return x.Trim().ToLower(); + }, + x => + { + eleInvoked++; + return Reverse(x); + }, + g => g.Skip(2), + _groupByUntilCapacity + ).Select(g => g.Key) ); res.Messages.AssertEqual( - OnNext(310, 102), - OnNext(390, 103), - OnNext(410, 104), - OnNext(490, 105), - OnNext(560, 301), - OnNext(580, 202), - OnNext(590, 203), - OnNext(600, 302), - OnNext(620, 303), - OnNext(740, 106), - OnNext(810, 304), - OnNext(860, 305), - OnNext(930, 401), - OnNext(940, 402) + OnNext(220, "foo"), + OnNext(270, "bar"), + OnNext(350, "baz"), + OnNext(360, "qux"), + OnNext(470, "foo"), + OnCompleted(570) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 900)); + Subscribe(200, 570) + ); - xs.Messages[2].Value.Value.Subscriptions.AssertEqual( - Subscribe(300, 760)); + Assert.AreEqual(12, keyInvoked); + Assert.AreEqual(12, eleInvoked); + } - xs.Messages[3].Value.Value.Subscriptions.AssertEqual( - Subscribe(400, 1000)); + [TestMethod] + public void GroupByUntil_Capacity_DurationSelector_Throws() + { + var scheduler = new TestScheduler(); - xs.Messages[4].Value.Value.Subscriptions.AssertEqual( - Subscribe(550, 960)); + var xs = scheduler.CreateHotObservable( + OnNext(210, "foo") + ); - xs.Messages[5].Value.Value.Subscriptions.AssertEqual( - Subscribe(750, 790)); + var ex = new Exception(); - xs.Messages[6].Value.Value.Subscriptions.AssertEqual( - Subscribe(850, 950)); + var res = scheduler.Start(() => + xs.GroupByUntil(x => x, g => { throw ex; }, _groupByUntilCapacity) + ); + + res.Messages.AssertEqual( + OnError>(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); } [TestMethod] - public void SelectMany_Complete_OuterNotComplete() + public void GroupByUntil_Capacity_NullKeys_Simple_Never() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(5, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(105, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(300, scheduler.CreateColdObservable( - OnNext(10, 102), - OnNext(90, 103), - OnNext(110, 104), - OnNext(190, 105), - OnNext(440, 106), - OnCompleted(460))), - OnNext(400, scheduler.CreateColdObservable( - OnNext(180, 202), - OnNext(190, 203), - OnCompleted(205))), - OnNext(550, scheduler.CreateColdObservable( - OnNext(10, 301), - OnNext(50, 302), - OnNext(70, 303), - OnNext(260, 304), - OnNext(310, 305), - OnCompleted(410))), - OnNext(750, scheduler.CreateColdObservable( - OnCompleted(40))), - OnNext(850, scheduler.CreateColdObservable( - OnNext(80, 401), - OnNext(90, 402), - OnCompleted(100))) + OnNext(220, "bar"), + OnNext(240, "foo"), + OnNext(310, "qux"), + OnNext(470, "baz"), + OnCompleted(500) ); - var res = scheduler.Start(() => - xs.SelectMany(x => x) - ); + var res = scheduler.Start(() => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => Observable.Never(), _groupByUntilCapacity).SelectMany(g => g, (g, x) => (g.Key ?? "(null)") + x)); res.Messages.AssertEqual( - OnNext(310, 102), - OnNext(390, 103), - OnNext(410, 104), - OnNext(490, 105), - OnNext(560, 301), - OnNext(580, 202), - OnNext(590, 203), - OnNext(600, 302), - OnNext(620, 303), - OnNext(740, 106), - OnNext(810, 304), - OnNext(860, 305), - OnNext(930, 401), - OnNext(940, 402) + OnNext(220, "(null)bar"), + OnNext(240, "FOOfoo"), + OnNext(310, "QUXqux"), + OnNext(470, "(null)baz"), + OnCompleted(500) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 1000)); - - xs.Messages[2].Value.Value.Subscriptions.AssertEqual( - Subscribe(300, 760)); - - xs.Messages[3].Value.Value.Subscriptions.AssertEqual( - Subscribe(400, 605)); - - xs.Messages[4].Value.Value.Subscriptions.AssertEqual( - Subscribe(550, 960)); - - xs.Messages[5].Value.Value.Subscriptions.AssertEqual( - Subscribe(750, 790)); - - xs.Messages[6].Value.Value.Subscriptions.AssertEqual( - Subscribe(850, 950)); + Subscribe(200, 500) + ); } [TestMethod] - public void SelectMany_Error_Outer() + public void GroupByUntil_Capacity_NullKeys_Simple_Expire1() { var scheduler = new TestScheduler(); - var ex = new Exception(); - var xs = scheduler.CreateHotObservable( - OnNext(5, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(105, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(300, scheduler.CreateColdObservable( - OnNext(10, 102), - OnNext(90, 103), - OnNext(110, 104), - OnNext(190, 105), - OnNext(440, 106), - OnCompleted(460))), - OnNext(400, scheduler.CreateColdObservable( - OnNext(180, 202), - OnNext(190, 203), - OnCompleted(205))), - OnNext(550, scheduler.CreateColdObservable( - OnNext(10, 301), - OnNext(50, 302), - OnNext(70, 303), - OnNext(260, 304), - OnNext(310, 305), - OnCompleted(410))), - OnNext(750, scheduler.CreateColdObservable( - OnCompleted(40))), - OnNext(850, scheduler.CreateColdObservable( - OnNext(80, 401), - OnNext(90, 402), - OnCompleted(100))), - OnError>(900, ex) + OnNext(220, "bar"), + OnNext(240, "foo"), + OnNext(310, "qux"), + OnNext(470, "baz"), + OnCompleted(500) ); - var res = scheduler.Start(() => - xs.SelectMany(x => x) - ); + var n = 0; + var res = scheduler.Start(() => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => { if (g.Key == null) n++; return Observable.Timer(TimeSpan.FromTicks(50), scheduler); }, _groupByUntilCapacity).SelectMany(g => g, (g, x) => (g.Key ?? "(null)") + x)); + + Assert.AreEqual(2, n); res.Messages.AssertEqual( - OnNext(310, 102), - OnNext(390, 103), - OnNext(410, 104), - OnNext(490, 105), - OnNext(560, 301), - OnNext(580, 202), - OnNext(590, 203), - OnNext(600, 302), - OnNext(620, 303), - OnNext(740, 106), - OnNext(810, 304), - OnNext(860, 305), - OnError(900, ex) + OnNext(220, "(null)bar"), + OnNext(240, "FOOfoo"), + OnNext(310, "QUXqux"), + OnNext(470, "(null)baz"), + OnCompleted(500) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 900)); + Subscribe(200, 500) + ); + } - xs.Messages[2].Value.Value.Subscriptions.AssertEqual( - Subscribe(300, 760)); + [TestMethod] + public void GroupByUntil_Capacity_NullKeys_Simple_Expire2() + { + var scheduler = new TestScheduler(); - xs.Messages[3].Value.Value.Subscriptions.AssertEqual( - Subscribe(400, 605)); + var xs = scheduler.CreateHotObservable( + OnNext(220, "bar"), + OnNext(240, "foo"), + OnNext(310, "qux"), + OnNext(470, "baz"), + OnCompleted(500) + ); - xs.Messages[4].Value.Value.Subscriptions.AssertEqual( - Subscribe(550, 900)); + var n = 0; + var res = scheduler.Start(() => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => { if (g.Key == null) n++; return Observable.Timer(TimeSpan.FromTicks(50), scheduler).IgnoreElements(); }, _groupByUntilCapacity).SelectMany(g => g, (g, x) => (g.Key ?? "(null)") + x)); - xs.Messages[5].Value.Value.Subscriptions.AssertEqual( - Subscribe(750, 790)); + Assert.AreEqual(2, n); - xs.Messages[6].Value.Value.Subscriptions.AssertEqual( - Subscribe(850, 900)); + res.Messages.AssertEqual( + OnNext(220, "(null)bar"), + OnNext(240, "FOOfoo"), + OnNext(310, "QUXqux"), + OnNext(470, "(null)baz"), + OnCompleted(500) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 500) + ); } [TestMethod] - public void SelectMany_Error_Inner() + public void GroupByUntil_Capacity_NullKeys_Error() { var scheduler = new TestScheduler(); var ex = new Exception(); var xs = scheduler.CreateHotObservable( - OnNext(5, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(105, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(300, scheduler.CreateColdObservable( - OnNext(10, 102), - OnNext(90, 103), - OnNext(110, 104), - OnNext(190, 105), - OnNext(440, 106), - OnError(460, ex))), - OnNext(400, scheduler.CreateColdObservable( - OnNext(180, 202), - OnNext(190, 203), - OnCompleted(205))), - OnNext(550, scheduler.CreateColdObservable( - OnNext(10, 301), - OnNext(50, 302), - OnNext(70, 303), - OnNext(260, 304), - OnNext(310, 305), - OnCompleted(410))), - OnNext(750, scheduler.CreateColdObservable( - OnCompleted(40))), - OnNext(850, scheduler.CreateColdObservable( - OnNext(80, 401), - OnNext(90, 402), - OnCompleted(100))), - OnCompleted>(900) + OnNext(220, "bar"), + OnNext(240, "foo"), + OnNext(310, "qux"), + OnNext(470, "baz"), + OnError(500, ex) ); - var res = scheduler.Start(() => - xs.SelectMany(x => x) - ); + var nullGroup = scheduler.CreateObserver(); + var err = default(Exception); - res.Messages.AssertEqual( - OnNext(310, 102), - OnNext(390, 103), - OnNext(410, 104), - OnNext(490, 105), - OnNext(560, 301), - OnNext(580, 202), - OnNext(590, 203), - OnNext(600, 302), - OnNext(620, 303), - OnNext(740, 106), - OnError(760, ex) - ); + scheduler.ScheduleAbsolute(200, () => xs.GroupByUntil(x => x[0] == 'b' ? null : x.ToUpper(), g => Observable.Never(), _groupByUntilCapacity).Where(g => g.Key == null).Subscribe(g => g.Subscribe(nullGroup), ex_ => err = ex_)); + scheduler.Start(); - xs.Subscriptions.AssertEqual( - Subscribe(200, 760)); + Assert.AreSame(ex, err); - xs.Messages[2].Value.Value.Subscriptions.AssertEqual( - Subscribe(300, 760)); + nullGroup.Messages.AssertEqual( + OnNext(220, "bar"), + OnNext(470, "baz"), + OnError(500, ex) + ); - xs.Messages[3].Value.Value.Subscriptions.AssertEqual( - Subscribe(400, 605)); + xs.Subscriptions.AssertEqual( + Subscribe(200, 500) + ); + } - xs.Messages[4].Value.Value.Subscriptions.AssertEqual( - Subscribe(550, 760)); + #endregion - xs.Messages[5].Value.Value.Subscriptions.AssertEqual( - Subscribe(750, 760)); + #region + GroupJoin + - xs.Messages[6].Value.Value.Subscriptions.AssertEqual( - ); + [TestMethod] + public void GroupJoinOp_ArgumentChecking() + { + ReactiveAssert.Throws(() => Observable.GroupJoin(null, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc, int>.Instance)); + ReactiveAssert.Throws(() => Observable.GroupJoin(DummyObservable.Instance, null, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc, int>.Instance)); + ReactiveAssert.Throws(() => Observable.GroupJoin(DummyObservable.Instance, DummyObservable.Instance, default(Func>), DummyFunc>.Instance, DummyFunc, int>.Instance)); + ReactiveAssert.Throws(() => Observable.GroupJoin(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, default(Func>), DummyFunc, int>.Instance)); + ReactiveAssert.Throws(() => Observable.GroupJoin(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, default(Func, int>))); + ReactiveAssert.Throws(() => Observable.GroupJoin(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc, int>.Instance).Subscribe(null)); } [TestMethod] - public void SelectMany_Dispose() + public void GroupJoinOp_Normal_I() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(5, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(105, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(300, scheduler.CreateColdObservable( - OnNext(10, 102), - OnNext(90, 103), - OnNext(110, 104), - OnNext(190, 105), - OnNext(440, 106), - OnCompleted(460))), - OnNext(400, scheduler.CreateColdObservable( - OnNext(180, 202), - OnNext(190, 203), - OnCompleted(205))), - OnNext(550, scheduler.CreateColdObservable( - OnNext(10, 301), - OnNext(50, 302), - OnNext(70, 303), - OnNext(260, 304), - OnNext(310, 305), - OnCompleted(410))), - OnNext(750, scheduler.CreateColdObservable( - OnCompleted(40))), - OnNext(850, scheduler.CreateColdObservable( - OnNext(80, 401), - OnNext(90, 402), - OnCompleted(100))), - OnCompleted>(900) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(280))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) + ); + + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany(x => x), - 700 + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnNext(310, 102), - OnNext(390, 103), - OnNext(410, 104), - OnNext(490, 105), - OnNext(560, 301), - OnNext(580, 202), - OnNext(590, 203), - OnNext(600, 302), - OnNext(620, 303) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnNext(830, "9rat"), + OnCompleted(990) ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 700)); - - xs.Messages[2].Value.Value.Subscriptions.AssertEqual( - Subscribe(300, 700)); - - xs.Messages[3].Value.Value.Subscriptions.AssertEqual( - Subscribe(400, 605)); - - xs.Messages[4].Value.Value.Subscriptions.AssertEqual( - Subscribe(550, 700)); + AssertDurations(xs, xsd, 990); + AssertDurations(ys, ysd, 990); - xs.Messages[5].Value.Value.Subscriptions.AssertEqual( +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + xs.Subscriptions.AssertEqual( + Subscribe(200, 900) + ); +#else + xs.Subscriptions.AssertEqual( + Subscribe(200, 990) ); +#endif - xs.Messages[6].Value.Value.Subscriptions.AssertEqual( +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + ys.Subscriptions.AssertEqual( + Subscribe(200, 800) + ); +#else + ys.Subscriptions.AssertEqual( + Subscribe(200, 990) ); +#endif } [TestMethod] - public void SelectMany_Throw() + public void GroupJoinOp_Normal_II() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(5, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(105, scheduler.CreateColdObservable( - OnError(1, new InvalidOperationException()))), - OnNext(300, scheduler.CreateColdObservable( - OnNext(10, 102), - OnNext(90, 103), - OnNext(110, 104), - OnNext(190, 105), - OnNext(440, 106), - OnCompleted(460))), - OnNext(400, scheduler.CreateColdObservable( - OnNext(180, 202), - OnNext(190, 203), - OnCompleted(205))), - OnNext(550, scheduler.CreateColdObservable( - OnNext(10, 301), - OnNext(50, 302), - OnNext(70, 303), - OnNext(260, 304), - OnNext(310, 305), - OnCompleted(410))), - OnNext(750, scheduler.CreateColdObservable( - OnCompleted(40))), - OnNext(850, scheduler.CreateColdObservable( - OnNext(80, 401), - OnNext(90, 402), - OnCompleted(100))), - OnCompleted>(900) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnCompleted>(721) ); - var invoked = 0; + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(990) + ); - var ex = new Exception(); + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - xs.SelectMany(x => - { - invoked++; - if (invoked == 3) - throw ex; - return x; - }) + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnNext(310, 102), - OnNext(390, 103), - OnNext(410, 104), - OnNext(490, 105), - OnError(550, ex) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnCompleted(910) ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 550)); - - xs.Messages[2].Value.Value.Subscriptions.AssertEqual( - Subscribe(300, 550)); - - xs.Messages[3].Value.Value.Subscriptions.AssertEqual( - Subscribe(400, 550)); + AssertDurations(xs, xsd, 910); + AssertDurations(ys, ysd, 910); - xs.Messages[4].Value.Value.Subscriptions.AssertEqual( +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + xs.Subscriptions.AssertEqual( + Subscribe(200, 721) ); - - xs.Messages[5].Value.Value.Subscriptions.AssertEqual( +#else + xs.Subscriptions.AssertEqual( + Subscribe(200, 910) ); +#endif - xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + ys.Subscriptions.AssertEqual( + Subscribe(200, 910) ); - - Assert.AreEqual(3, invoked); } [TestMethod] - public void SelectMany_UseFunction() + public void GroupJoinOp_Normal_III() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 4), - OnNext(220, 3), - OnNext(250, 5), - OnNext(270, 1), - OnCompleted(290) - ); - - var res = scheduler.Start(() => - xs.SelectMany(x => Observable.Interval(TimeSpan.FromTicks(10), scheduler).Select(_ => x).Take(x)) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(280))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); - res.Messages.AssertEqual( - OnNext(220, 4), - OnNext(230, 3), - OnNext(230, 4), - OnNext(240, 3), - OnNext(240, 4), - OnNext(250, 3), - OnNext(250, 4), - OnNext(260, 5), - OnNext(270, 5), - OnNext(280, 1), - OnNext(280, 5), - OnNext(290, 5), - OnNext(300, 5), - OnCompleted(300) - ); - - xs.Subscriptions.AssertEqual( - Subscribe(200, 290) + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); - } - - [TestMethod] - // Tests this overload: - // IObservable SelectMany(IObservable source, Func> selector); - public void SelectMany_WithIndex_Complete() - { - var scheduler = new TestScheduler(); - ITestableObservable cs = scheduler.CreateHotObservable( - OnNext(190, 'h'), // Test scheduler starts pushing events at time 200, so this is ignored. - OnNext(250, 'a'), - OnNext(270, 'l'), - OnNext(310, 'o'), - OnCompleted(410) - ); + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - cs.SelectMany( - (x, i) => Observable.Return(new { x, i }, scheduler) - )); - - res.Messages.AssertEqual( - OnNext(251, new { x = 'a', i = 0 }), - OnNext(271, new { x = 'l', i = 1 }), - OnNext(311, new { x = 'o', i = 2 }), - OnCompleted(new { x = default(char), i = default(int) }, 410) + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler).Where(_ => false), y => NewTimer(ysd, y.Interval, scheduler).Where(_ => false), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); - cs.Subscriptions.AssertEqual( - Subscribe(200, 410)); - } - - [TestMethod] - // Tests this overload: - // IObservable SelectMany(IObservable source, Func> selector); - public void SelectMany_WithIndex_IEnumerable_Complete() - { - var scheduler = new TestScheduler(); - - ITestableObservable cs = scheduler.CreateHotObservable( - OnNext(190, 'h'), // Test scheduler starts pushing events at time 200, so this is ignored. - OnNext(250, 'a'), - OnNext(270, 'l'), - OnNext(310, 'o'), - OnCompleted(410) - ); - - var res = scheduler.Start(() => - cs.SelectMany( - (c, i) => new [] { new { c = c, i = i } } - )); - - res.Messages.AssertEqual( - OnNext(250, new { c = 'a', i = 0 }), - OnNext(270, new { c = 'l', i = 1 }), - OnNext(310, new { c = 'o', i = 2 }), - OnCompleted(new { c = default(char), i = default(int) }, 410) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnNext(830, "9rat"), + OnCompleted(990) ); - cs.Subscriptions.AssertEqual( - Subscribe(200, 410)); - } - - - [TestMethod] - // Tests this overload: - // IObservable SelectMany(IObservable source, Func> collectionSelector, Func resultSelector); - public void SelectMany_WithIndex_IObservable_ResultSelector_Complete() - { - var scheduler = new TestScheduler(); - - ITestableObservable> css = scheduler.CreateHotObservable( - OnNext(190, scheduler.CreateColdObservable( - OnNext(1, 'h'), - OnCompleted(2))), - OnNext(250, scheduler.CreateColdObservable( - OnNext(1, 'a'), - OnCompleted(2))), - OnNext(270, scheduler.CreateColdObservable( - OnNext(1, 'l'), - OnCompleted(2))), - OnNext(310, scheduler.CreateColdObservable( - OnNext(1, 'o'), - OnNext(2, ' '), - OnNext(3, 'r'), - OnNext(4, 'u'), - OnNext(5, 'l'), - OnNext(6, 'e'), - OnNext(7, 'z'), - OnCompleted(8))), - OnCompleted>(410) - ); - - var res = scheduler.Start(() => - css.SelectMany( - (foo, i) => - { - return foo.Select(c => new { c = c, i = i }); - }, - (source, i, cs, j) => new { c = cs.c, i = cs.i, i2 = i, j = j } - )); + AssertDurations(xs, xsd, 990); + AssertDurations(ys, ysd, 990); - res.Messages.AssertEqual( - OnNext(251, new { c = 'a', i = 0, i2 = 0, j = 0 }), - OnNext(271, new { c = 'l', i = 1, i2 = 1, j = 0 }), - OnNext(311, new { c = 'o', i = 2, i2 = 2, j = 0 }), - OnNext(312, new { c = ' ', i = 2, i2 = 2, j = 1 }), - OnNext(313, new { c = 'r', i = 2, i2 = 2, j = 2 }), - OnNext(314, new { c = 'u', i = 2, i2 = 2, j = 3 }), - OnNext(315, new { c = 'l', i = 2, i2 = 2, j = 4 }), - OnNext(316, new { c = 'e', i = 2, i2 = 2, j = 5 }), - OnNext(317, new { c = 'z', i = 2, i2 = 2, j = 6 }), - OnCompleted(new { c = 'a', i = 0, i2 = 0, j = 0 }, 410) +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + xs.Subscriptions.AssertEqual( + Subscribe(200, 900) + ); +#else + xs.Subscriptions.AssertEqual( + Subscribe(200, 990) ); +#endif - css.Subscriptions.AssertEqual( - Subscribe(200, 410)); +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + ys.Subscriptions.AssertEqual( + Subscribe(200, 800) + ); +#else + ys.Subscriptions.AssertEqual( + Subscribe(200, 990) + ); +#endif } - [TestMethod] - // Tests this overload: - // IObservable SelectMany(IObservable source, Func> collectionSelector, Func resultSelector); - public void SelectMany_WithIndex_IEnumerable_ResultSelector_Complete() + public void GroupJoinOp_Normal_IV() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 5), - OnNext(340, 4), - OnNext(420, 3), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnCompleted>(990) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(980) ); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany( - (x, i) => new[] { new { x = x + 1, i = i }, new { x = -x, i = i }, new { x = x * x, i = i } }, - (x, i, y, j) => new { x = x, i = i, y = y.x, y_i = y.i, j = j }) + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); - + res.Messages.AssertEqual( - OnNext(210, new { x = 5, i = 0, y = 6, y_i = 0, j = 0 }), - OnNext(210, new { x = 5, i = 0, y = -5, y_i = 0, j = 1 }), - OnNext(210, new { x = 5, i = 0, y = 25, y_i = 0, j = 2 }), - OnNext(340, new { x = 4, i = 1, y = 5, y_i = 1, j = 0 }), - OnNext(340, new { x = 4, i = 1, y = -4, y_i = 1, j = 1 }), - OnNext(340, new { x = 4, i = 1, y = 16, y_i = 1, j = 2 }), - OnNext(420, new { x = 3, i = 2, y = 4, y_i = 2, j = 0 }), - OnNext(420, new { x = 3, i = 2, y = -3, y_i = 2, j = 1 }), - OnNext(420, new { x = 3, i = 2, y = 9, y_i = 2, j = 2 }), - OnCompleted(new { x = default(int), i = default(int), y = default(int), y_i = default(int), j = default(int) }, 600) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnCompleted(990) ); + AssertDurations(xs, xsd, 990); + AssertDurations(ys, ysd, 990); + xs.Subscriptions.AssertEqual( - Subscribe(200, 600) + Subscribe(200, 990) + ); + +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + ys.Subscriptions.AssertEqual( + Subscribe(200, 980) + ); +#else + ys.Subscriptions.AssertEqual( + Subscribe(200, 990) ); +#endif } [TestMethod] - // Tests this overload: - // IObservable SelectMany(IObservable source, Func> onNext, Func> onError, Func> onCompleted); - public void SelectMany_WithIndex_Triple_Complete() + public void GroupJoinOp_Normal_V() { var scheduler = new TestScheduler(); - ITestableObservable cs = scheduler.CreateHotObservable( - OnNext(190, 'h'), // Test scheduler starts pushing events at time 200, so this is ignored. - OnNext(250, 'a'), - OnNext(270, 'l'), - OnNext(310, 'o'), - OnCompleted(410) - ); + var xs = scheduler.CreateHotObservable( + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnCompleted>(990) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(900) + ); + + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - cs.SelectMany( - (c, i) => Observable.Return(new { c = c, i = i }, scheduler), - (ex, i) => { throw ex; }, - (i) => Observable.Repeat(new { c = 'x', i = -1 }, i, scheduler) - )); + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() + ); res.Messages.AssertEqual( - OnNext(251, new { c = 'a', i = 0 }), - OnNext(271, new { c = 'l', i = 1 }), - OnNext(311, new { c = 'o', i = 2 }), - OnCompleted(new { c = default(char), i = default(int) }, 410) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnCompleted(990) ); - cs.Subscriptions.AssertEqual( - Subscribe(200, 410)); - } - + AssertDurations(xs, xsd, 990); + AssertDurations(ys, ysd, 990); - [TestMethod] - public void SelectMany_Enumerable_ArgumentChecking() - { - ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance).Subscribe(null)); + xs.Subscriptions.AssertEqual( + Subscribe(200, 990) + ); - ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, (Func)null)); +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + ys.Subscriptions.AssertEqual( + Subscribe(200, 900) + ); +#else + ys.Subscriptions.AssertEqual( + Subscribe(200, 990) + ); +#endif } [TestMethod] - public void SelectMany_Enumerable_Complete() + public void GroupJoinOp_Normal_VI() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(30))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(200))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(850) ); - var inners = new List>(); + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(20))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(900) + ); + + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - xs.SelectMany(x => - { - var ys = new MockEnumerable(scheduler, Enumerable.Repeat(x, x)); - inners.Add(ys); - return ys; - }) + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnNext(210, 2), - OnNext(210, 2), - OnNext(340, 4), - OnNext(340, 4), - OnNext(340, 4), - OnNext(340, 4), - OnNext(420, 3), - OnNext(420, 3), - OnNext(420, 3), - OnNext(510, 2), - OnNext(510, 2), - OnCompleted(600) - ); - - xs.Subscriptions.AssertEqual( - Subscribe(200, 600) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnCompleted(920) ); - Assert.AreEqual(4, inners.Count); + AssertDurations(xs, xsd, 920); + AssertDurations(ys, ysd, 920); - inners[0].Subscriptions.AssertEqual( - Subscribe(210, 210) +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + xs.Subscriptions.AssertEqual( + Subscribe(200, 850) ); - - inners[1].Subscriptions.AssertEqual( - Subscribe(340, 340) +#else + xs.Subscriptions.AssertEqual( + Subscribe(200, 920) ); +#endif - inners[2].Subscriptions.AssertEqual( - Subscribe(420, 420) +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + ys.Subscriptions.AssertEqual( + Subscribe(200, 900) ); - - inners[3].Subscriptions.AssertEqual( - Subscribe(510, 510) +#else + ys.Subscriptions.AssertEqual( + Subscribe(200, 920) ); +#endif } [TestMethod] - public void SelectMany_Enumerable_Complete_ResultSelector() + public void GroupJoinOp_Normal_VII() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnCompleted>(210) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(20))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(900) ); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany(x => Enumerable.Repeat(x, x), (x, y) => x + y) + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnNext(210, 4), - OnNext(210, 4), - OnNext(340, 8), - OnNext(340, 8), - OnNext(340, 8), - OnNext(340, 8), - OnNext(420, 6), - OnNext(420, 6), - OnNext(420, 6), - OnNext(510, 4), - OnNext(510, 4), - OnCompleted(600) + OnCompleted(210) ); + AssertDurations(xs, xsd, 210); + AssertDurations(ys, ysd, 210); + xs.Subscriptions.AssertEqual( - Subscribe(200, 600) + Subscribe(200, 210) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 210) ); } [TestMethod] - public void SelectMany_Enumerable_Error() + public void GroupJoinOp_Normal_VIII() { var scheduler = new TestScheduler(); - var ex = new Exception(); - var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnError(600, ex) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(200))) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(220, new TimeInterval("hat", TimeSpan.FromTicks(100))), + OnCompleted>(230) ); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany(x => Enumerable.Repeat(x, x)) + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnNext(210, 2), - OnNext(210, 2), - OnNext(340, 4), - OnNext(340, 4), - OnNext(340, 4), - OnNext(340, 4), - OnNext(420, 3), - OnNext(420, 3), - OnNext(420, 3), - OnNext(510, 2), - OnNext(510, 2), - OnError(600, ex) + OnNext(220, "0hat") ); + AssertDurations(xs, xsd, 1000); + AssertDurations(ys, ysd, 1000); + xs.Subscriptions.AssertEqual( - Subscribe(200, 600) + Subscribe(200, 1000) + ); + +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + ys.Subscriptions.AssertEqual( + Subscribe(200, 230) + ); +#else + ys.Subscriptions.AssertEqual( + Subscribe(200, 1000) ); +#endif } [TestMethod] - public void SelectMany_Enumerable_Error_ResultSelector() + public void GroupJoinOp_Normal_IX() { var scheduler = new TestScheduler(); - var ex = new Exception(); - var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnError(600, ex) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); - var res = scheduler.Start(() => - xs.SelectMany(x => Enumerable.Repeat(x, x), (x, y) => x + y) + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); - res.Messages.AssertEqual( - OnNext(210, 4), - OnNext(210, 4), - OnNext(340, 8), - OnNext(340, 8), - OnNext(340, 8), - OnNext(340, 8), - OnNext(420, 6), - OnNext(420, 6), - OnNext(420, 6), - OnNext(510, 4), - OnNext(510, 4), - OnError(600, ex) - ); + var xsd = new List>(); + var ysd = new List>(); - xs.Subscriptions.AssertEqual( - Subscribe(200, 600) + var res = scheduler.Start(() => + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge(), + 713 ); - } - [TestMethod] - public void SelectMany_Enumerable_Dispose() - { - var scheduler = new TestScheduler(); - - var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + res.Messages.AssertEqual( + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man") ); - var res = scheduler.Start(() => - xs.SelectMany(x => Enumerable.Repeat(x, x)), - 350 - ); + AssertDurations(xs, xsd, 713); + AssertDurations(ys, ysd, 713); - res.Messages.AssertEqual( - OnNext(210, 2), - OnNext(210, 2), - OnNext(340, 4), - OnNext(340, 4), - OnNext(340, 4), - OnNext(340, 4) + xs.Subscriptions.AssertEqual( + Subscribe(200, 713) ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 350) + ys.Subscriptions.AssertEqual( + Subscribe(200, 713) ); } [TestMethod] - public void SelectMany_Enumerable_Dispose_ResultSelector() + public void GroupJoinOp_Error_I() { var scheduler = new TestScheduler(); + var ex = new Exception(); + var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnError>(310, ex) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany(x => Enumerable.Repeat(x, x), (x, y) => x + y), - 350 + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnNext(210, 4), - OnNext(210, 4), - OnNext(340, 8), - OnNext(340, 8), - OnNext(340, 8), - OnNext(340, 8) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnError(310, ex) ); + AssertDurations(xs, xsd, 310); + AssertDurations(ys, ysd, 310); + xs.Subscriptions.AssertEqual( - Subscribe(200, 350) + Subscribe(200, 310) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 310) ); } [TestMethod] - public void SelectMany_Enumerable_SelectorThrows() + public void GroupJoinOp_Error_II() { var scheduler = new TestScheduler(); + var ex = new Exception(); + var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); - var invoked = 0; - var ex = new Exception(); + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnError>(722, ex) + ); - var res = scheduler.Start(() => - xs.SelectMany(x => - { - invoked++; - if (invoked == 3) - throw ex; + var xsd = new List>(); + var ysd = new List>(); - return Enumerable.Repeat(x, x); - }) + var res = scheduler.Start(() => + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnNext(210, 2), - OnNext(210, 2), - OnNext(340, 4), - OnNext(340, 4), - OnNext(340, 4), - OnNext(340, 4), - OnError(420, ex) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnError(722, ex) ); + AssertDurations(xs, xsd, 722); + AssertDurations(ys, ysd, 722); + xs.Subscriptions.AssertEqual( - Subscribe(200, 420) + Subscribe(200, 722) ); - Assert.AreEqual(3, invoked); + ys.Subscriptions.AssertEqual( + Subscribe(200, 722) + ); } [TestMethod] - public void SelectMany_Enumerable_ResultSelectorThrows() + public void GroupJoinOp_Error_III() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); var ex = new Exception(); - var inners = new List>(); + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - xs.SelectMany( - x => - { - var ys = new MockEnumerable(scheduler, Enumerable.Repeat(x, x)); - inners.Add(ys); - return ys; - }, - (x, y) => - { - if (x == 3) - throw ex; - - return x + y; - } - ) + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler).SelectMany(x.Value == 6 ? Observable.Throw(ex) : Observable.Empty()), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnNext(210, 4), - OnNext(210, 4), - OnNext(340, 8), - OnNext(340, 8), - OnNext(340, 8), - OnNext(340, 8), - OnError(420, ex) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnError(725, ex) ); + AssertDurations(xs, xsd, 725); + AssertDurations(ys, ysd, 725); + xs.Subscriptions.AssertEqual( - Subscribe(200, 420) + Subscribe(200, 725) ); - Assert.AreEqual(3, inners.Count); - - inners[0].Subscriptions.AssertEqual( - Subscribe(210, 210) - ); - - inners[1].Subscriptions.AssertEqual( - Subscribe(340, 340) - ); - - inners[2].Subscriptions.AssertEqual( - Subscribe(420, 420) + ys.Subscriptions.AssertEqual( + Subscribe(200, 725) ); } [TestMethod] - public void SelectMany_Enumerable_ResultSelector_GetEnumeratorThrows() + public void GroupJoinOp_Error_IV() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(19))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); var ex = new Exception(); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany(x => new RogueEnumerable(ex), (x, y) => x + y) + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler).SelectMany(y.Value == "tin" ? Observable.Throw(ex) : Observable.Empty()), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnError(210, ex) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnError(721, ex) ); + AssertDurations(xs, xsd, 721); + AssertDurations(ys, ysd, 721); + xs.Subscriptions.AssertEqual( - Subscribe(200, 210) + Subscribe(200, 721) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 721) ); } [TestMethod] - public void SelectMany_Enumerable_SelectorThrows_ResultSelector() + public void GroupJoinOp_Error_V() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); - var invoked = 0; var ex = new Exception(); - var res = scheduler.Start(() => - xs.SelectMany( - x => - { - invoked++; - if (invoked == 3) - throw ex; + var ysd = new List>(); - return Enumerable.Repeat(x, x); - }, - (x, y) => x + y - ) + var res = scheduler.Start(() => + xs.GroupJoin(ys, x => { if (x.Value >= 0) throw ex; return Observable.Empty(); }, y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnNext(210, 4), - OnNext(210, 4), - OnNext(340, 8), - OnNext(340, 8), - OnNext(340, 8), - OnNext(340, 8), - OnError(420, ex) + OnError(210, ex) ); + AssertDurations(ys, ysd, 210); + xs.Subscriptions.AssertEqual( - Subscribe(200, 420) + Subscribe(200, 210) ); - Assert.AreEqual(3, invoked); - } - - class CurrentThrowsEnumerable : IEnumerable - { - IEnumerable e; - Exception ex; - - public CurrentThrowsEnumerable(IEnumerable e, Exception ex) - { - this.e = e; - this.ex = ex; - } - - public IEnumerator GetEnumerator() - { - return new Enumerator(e.GetEnumerator(), ex); - } - - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - - class Enumerator : IEnumerator - { - IEnumerator e; - Exception ex; - - public Enumerator(IEnumerator e, Exception ex) - { - this.e = e; - this.ex = ex; - } - - public T Current - { - get { throw ex; } - } - - public void Dispose() - { - e.Dispose(); - } - - object System.Collections.IEnumerator.Current - { - get { return Current; } - } - - public bool MoveNext() - { - return e.MoveNext(); - } - - public void Reset() - { - e.Reset(); - } - } + ys.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); } [TestMethod] - public void SelectMany_Enumerable_CurrentThrows() + public void GroupJoinOp_Error_VI() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); var ex = new Exception(); + var xsd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany(x => new CurrentThrowsEnumerable(Enumerable.Repeat(x, x), ex)) + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => { if (y.Value.Length >= 0) throw ex; return Observable.Empty(); }, (x, yy) => yy.Select(y => x.Value + y.Value)).Merge() ); res.Messages.AssertEqual( - OnError(210, ex) + OnError(215, ex) ); + AssertDurations(xs, xsd, 215); + xs.Subscriptions.AssertEqual( - Subscribe(200, 210) + Subscribe(200, 215) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 215) ); } [TestMethod] - public void SelectMany_Enumerable_CurrentThrows_ResultSelector() + public void GroupJoinOp_Error_VII() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) - ); - - var ex = new Exception(); - - var res = scheduler.Start(() => - xs.SelectMany(x => new CurrentThrowsEnumerable(Enumerable.Repeat(x, x), ex), (x, y) => x + y) - ); - - res.Messages.AssertEqual( - OnError(210, ex) + OnNext(215, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 210) + var ys = scheduler.CreateHotObservable( + OnNext(210, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); - } - - class MoveNextThrowsEnumerable : IEnumerable - { - IEnumerable e; - Exception ex; - - public MoveNextThrowsEnumerable(IEnumerable e, Exception ex) - { - this.e = e; - this.ex = ex; - } - - public IEnumerator GetEnumerator() - { - return new Enumerator(e.GetEnumerator(), ex); - } - - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() - { - return GetEnumerator(); - } - class Enumerator : IEnumerator - { - IEnumerator e; - Exception ex; + var ex = new Exception(); - public Enumerator(IEnumerator e, Exception ex) - { - this.e = e; - this.ex = ex; - } + var xsd = new List>(); + var ysd = new List>(); - public T Current - { - get { return e.Current; } - } + var res = scheduler.Start(() => + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => { if (x.Value >= 0) throw ex; return yy.Select(y => x.Value + y.Value); }).Merge() + ); - public void Dispose() - { - e.Dispose(); - } + res.Messages.AssertEqual( + OnError(215, ex) + ); - object System.Collections.IEnumerator.Current - { - get { return Current; } - } +#if !NO_PERF // BREAKING CHANGE v2 > v1.x - Duration selector is now invoked before the result selector + AssertDurations(xs, xsd, 215); +#endif + AssertDurations(ys, ysd, 215); - public bool MoveNext() - { - throw ex; - } + xs.Subscriptions.AssertEqual( + Subscribe(200, 215) + ); - public void Reset() - { - e.Reset(); - } - } + ys.Subscriptions.AssertEqual( + Subscribe(200, 215) + ); } [TestMethod] - public void SelectMany_Enumerable_GetEnumeratorThrows() + public void GroupJoinOp_Error_VIII() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); var ex = new Exception(); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany(x => new RogueEnumerable(ex)) + xs.GroupJoin(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, yy) => { if (x.Value >= 0) throw ex; return yy.Select(y => x.Value + y.Value); }).Merge() ); res.Messages.AssertEqual( - OnError(210, ex) + OnError(210, ex) ); +#if !NO_PERF // BREAKING CHANGE v2 > v1.x - Duration selector is now invoked before the result selector + AssertDurations(xs, xsd, 210); +#endif + AssertDurations(ys, ysd, 210); + xs.Subscriptions.AssertEqual( Subscribe(200, 210) ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); } + #endregion + + #region + Join + + [TestMethod] - public void SelectMany_Enumerable_MoveNextThrows() + public void JoinOp_ArgumentChecking() + { + ReactiveAssert.Throws(() => Observable.Join(null, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => Observable.Join(DummyObservable.Instance, null, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => Observable.Join(DummyObservable.Instance, DummyObservable.Instance, default(Func>), DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => Observable.Join(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, default(Func>), DummyFunc.Instance)); + ReactiveAssert.Throws(() => Observable.Join(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, default(Func))); + ReactiveAssert.Throws(() => Observable.Join(DummyObservable.Instance, DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc.Instance).Subscribe(null)); + } + + [TestMethod] + public void JoinOp_Normal_I() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); - var ex = new Exception(); + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) + ); + + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - xs.SelectMany(x => new MoveNextThrowsEnumerable(Enumerable.Repeat(x, x), ex)) + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnError(210, ex) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnNext(830, "9rat"), + OnCompleted(900) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 210) + Subscribe(200, 900) + ); + +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + ys.Subscriptions.AssertEqual( + Subscribe(200, 800) + ); +#else + ys.Subscriptions.AssertEqual( + Subscribe(200, 900) ); +#endif + + AssertDurations(xs, xsd, 900); + AssertDurations(ys, ysd, 900); } [TestMethod] - public void SelectMany_Enumerable_MoveNextThrows_ResultSelector() + public void JoinOp_Normal_II() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(210, 2), - OnNext(340, 4), - OnNext(420, 3), - OnNext(510, 2), - OnCompleted(600) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnCompleted>(721) ); - var ex = new Exception(); + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(990) + ); + + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - xs.SelectMany(x => new MoveNextThrowsEnumerable(Enumerable.Repeat(x, x), ex), (x, y) => x + y) + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnError(210, ex) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnCompleted(910) ); +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior xs.Subscriptions.AssertEqual( - Subscribe(200, 210) + Subscribe(200, 721) ); - } - - [TestMethod] - public void SelectMany_QueryOperator_ArgumentChecking() - { - ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, ((Func)null))); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, DummyFunc.Instance).Subscribe(null)); - -#if !NO_TPL - ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, ((Func)null))); - - ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, ((Func)null))); +#else + xs.Subscriptions.AssertEqual( + Subscribe(200, 910) + ); +#endif - ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); + ys.Subscriptions.AssertEqual( + Subscribe(200, 910) + ); - ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); - ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); -#endif + AssertDurations(xs, xsd, 910); + AssertDurations(ys, ysd, 910); } [TestMethod] - public void SelectMany_QueryOperator_CompleteOuterFirst() + public void JoinOp_Normal_III() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(220, 4), - OnNext(221, 3), - OnNext(222, 2), - OnNext(223, 5), - OnCompleted(224) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - from x in xs - from y in Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) - select x * 10 + (int)y + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler).Where(_ => false), y => NewTimer(ysd, y.Interval, scheduler).Where(_ => false), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnNext(221, 40), - OnNext(222, 30), - OnNext(222, 41), - OnNext(223, 20), - OnNext(223, 31), - OnNext(223, 42), - OnNext(224, 50), - OnNext(224, 21), - OnNext(224, 32), - OnNext(224, 43), - OnNext(225, 51), - OnNext(226, 52), - OnNext(227, 53), - OnNext(228, 54), - OnCompleted(228) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnNext(830, "9rat"), + OnCompleted(900) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 224) + Subscribe(200, 900) + ); + +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + ys.Subscriptions.AssertEqual( + Subscribe(200, 800) ); +#else + ys.Subscriptions.AssertEqual( + Subscribe(200, 900) + ); +#endif + + AssertDurations(xs, xsd, 900); + AssertDurations(ys, ysd, 900); } [TestMethod] - public void SelectMany_QueryOperator_CompleteInnerFirst() + public void JoinOp_Normal_IV() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(220, 4), - OnNext(221, 3), - OnNext(222, 2), - OnNext(223, 5), - OnCompleted(300) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnCompleted>(990) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(980) ); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - from x in xs - from y in Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) - select x * 10 + (int)y + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnNext(221, 40), - OnNext(222, 30), - OnNext(222, 41), - OnNext(223, 20), - OnNext(223, 31), - OnNext(223, 42), - OnNext(224, 50), - OnNext(224, 21), - OnNext(224, 32), - OnNext(224, 43), - OnNext(225, 51), - OnNext(226, 52), - OnNext(227, 53), - OnNext(228, 54), - OnCompleted(300) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnCompleted(980) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 300) + Subscribe(200, 980) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 980) ); + + AssertDurations(xs, xsd, 980); + AssertDurations(ys, ysd, 980); } [TestMethod] - public void SelectMany_QueryOperator_ErrorOuter() + public void JoinOp_Normal_V() { var scheduler = new TestScheduler(); - var ex = new Exception(); - var xs = scheduler.CreateHotObservable( - OnNext(220, 4), - OnNext(221, 3), - OnNext(222, 2), - OnNext(223, 5), - OnError(224, ex) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(200))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnCompleted>(990) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(900) ); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - from x in xs - from y in Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) - select x * 10 + (int)y + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnNext(221, 40), - OnNext(222, 30), - OnNext(222, 41), - OnNext(223, 20), - OnNext(223, 31), - OnNext(223, 42), - OnError(224, ex) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnCompleted(922) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 224) - ); - } - - [TestMethod] - public void SelectMany_QueryOperator_ErrorInner() - { - var scheduler = new TestScheduler(); - - var xs = scheduler.CreateHotObservable( - OnNext(220, 4), - OnNext(221, 3), - OnNext(222, 2), - OnNext(223, 5), - OnCompleted(224) + Subscribe(200, 922) ); - var ex = new Exception(); - - var res = scheduler.Start(() => - from x in xs - from y in x == 2 ? Observable.Throw(ex, scheduler) - : Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) - select x * 10 + (int)y +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior + ys.Subscriptions.AssertEqual( + Subscribe(200, 900) ); - - res.Messages.AssertEqual( - OnNext(221, 40), - OnNext(222, 30), - OnNext(222, 41), - OnError(223, ex) +#else + ys.Subscriptions.AssertEqual( + Subscribe(200, 922) ); +#endif - xs.Subscriptions.AssertEqual( - Subscribe(200, 223) - ); + AssertDurations(xs, xsd, 922); + AssertDurations(ys, ysd, 922); } [TestMethod] - public void SelectMany_QueryOperator_Dispose() + public void JoinOp_Normal_VI() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(220, 4), - OnNext(221, 3), - OnNext(222, 2), - OnNext(223, 5), - OnCompleted(224) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(30))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(200))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(850) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(20))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(900) ); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - from x in xs - from y in Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) - select x * 10 + (int)y, - 223 + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnNext(221, 40), - OnNext(222, 30), - OnNext(222, 41) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnNext(732, "7wig"), + OnNext(732, "8wig"), + OnCompleted(900) ); +#if !NO_PERF // BREAKING CHANGE v2 > v1.x -> More aggressive disposal behavior xs.Subscriptions.AssertEqual( - Subscribe(200, 223) + Subscribe(200, 850) ); - } +#else + xs.Subscriptions.AssertEqual( + Subscribe(200, 900) + ); +#endif - static T Throw(Exception ex) - { - throw ex; - } + ys.Subscriptions.AssertEqual( + Subscribe(200, 900) + ); + AssertDurations(xs, xsd, 900); + AssertDurations(ys, ysd, 900); + } [TestMethod] - public void SelectMany_QueryOperator_ThrowSelector() + public void JoinOp_Normal_VII() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(220, 4), - OnNext(221, 3), - OnNext(222, 2), - OnNext(223, 5), - OnCompleted(224) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); - var ex = new Exception(); + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) + ); + + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - from x in xs - from y in Throw>(ex) - select x * 10 + (int)y + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value), + 713 ); res.Messages.AssertEqual( - OnError(220, ex) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man") ); xs.Subscriptions.AssertEqual( - Subscribe(200, 220) + Subscribe(200, 713) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 713) ); + + AssertDurations(xs, xsd, 713); + AssertDurations(ys, ysd, 713); } [TestMethod] - public void SelectMany_QueryOperator_ThrowResult() + public void JoinOp_Error_I() { var scheduler = new TestScheduler(); + var ex = new Exception(); + var xs = scheduler.CreateHotObservable( - OnNext(220, 4), - OnNext(221, 3), - OnNext(222, 2), - OnNext(223, 5), - OnCompleted(224) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnError>(310, ex) ); - var ex = new Exception(); + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) + ); + + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - from x in xs - from y in Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) - select Throw(ex) + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnError(221, ex) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnError(310, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 221) + Subscribe(200, 310) ); - } - [TestMethod] - public void SelectMany_Triple_ArgumentChecking() - { - ReactiveAssert.Throws(() => Observable.SelectMany(null, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc>.Instance)); - ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, null, DummyFunc>.Instance, DummyFunc>.Instance)); - ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, DummyFunc>.Instance, null, DummyFunc>.Instance)); - ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, null)); - ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc>.Instance).Subscribe(null)); + ys.Subscriptions.AssertEqual( + Subscribe(200, 310) + ); + + AssertDurations(xs, xsd, 310); + AssertDurations(ys, ysd, 310); } [TestMethod] - public void SelectMany_Triple_Identity() + public void JoinOp_Error_II() { var scheduler = new TestScheduler(); + var ex = new Exception(); + var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnError>(722, ex) ); + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Return(x, scheduler), - ex => Observable.Throw(ex, scheduler), - () => Observable.Empty(scheduler) - ) + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnNext(301, 0), - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(305, 4), - OnCompleted(306) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnError(722, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 305) + Subscribe(200, 722) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 722) ); + + AssertDurations(xs, xsd, 722); + AssertDurations(ys, ysd, 722); } [TestMethod] - public void SelectMany_Triple_InnersWithTiming1() + public void JoinOp_Error_III() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); - var ysn = scheduler.CreateColdObservable( - OnNext(10, 10), - OnNext(20, 11), - OnNext(30, 12), - OnCompleted(40) + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); - var yse = scheduler.CreateColdObservable( - OnNext(0, 99), - OnCompleted(10) - ); + var ex = new Exception(); - var ysc = scheduler.CreateColdObservable( - OnNext(10, 42), - OnCompleted(20) - ); + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - xs.SelectMany( - x => ysn, - ex => yse, - () => ysc - ) + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler).SelectMany(x.Value == 6 ? Observable.Throw(ex) : Observable.Empty()), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnNext(310, 10), - OnNext(311, 10), - OnNext(312, 10), - OnNext(313, 10), - OnNext(314, 10), - OnNext(315, 42), - OnNext(320, 11), - OnNext(321, 11), - OnNext(322, 11), - OnNext(323, 11), - OnNext(324, 11), - OnNext(330, 12), - OnNext(331, 12), - OnNext(332, 12), - OnNext(333, 12), - OnNext(334, 12), - OnCompleted(344) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnNext(722, "7rat"), + OnNext(722, "6rat"), + OnNext(722, "8rat"), + OnError(725, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 305) - ); - - ysn.Subscriptions.AssertEqual( - Subscribe(300, 340), - Subscribe(301, 341), - Subscribe(302, 342), - Subscribe(303, 343), - Subscribe(304, 344) + Subscribe(200, 725) ); - yse.Subscriptions.AssertEqual( + ys.Subscriptions.AssertEqual( + Subscribe(200, 725) ); - ysc.Subscriptions.AssertEqual( - Subscribe(305, 325) - ); + AssertDurations(xs, xsd, 725); + AssertDurations(ys, ysd, 725); } [TestMethod] - public void SelectMany_Triple_InnersWithTiming2() + public void JoinOp_Error_IV() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); - var ysn = scheduler.CreateColdObservable( - OnNext(10, 10), - OnNext(20, 11), - OnNext(30, 12), - OnCompleted(40) + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(19))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); - var yse = scheduler.CreateColdObservable( - OnNext(0, 99), - OnCompleted(10) - ); + var ex = new Exception(); - var ysc = scheduler.CreateColdObservable( - OnNext(10, 42), - OnCompleted(50) - ); + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - xs.SelectMany( - x => ysn, - ex => yse, - () => ysc - ) + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler).SelectMany(y.Value == "tin" ? Observable.Throw(ex) : Observable.Empty()), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnNext(310, 10), - OnNext(311, 10), - OnNext(312, 10), - OnNext(313, 10), - OnNext(314, 10), - OnNext(315, 42), - OnNext(320, 11), - OnNext(321, 11), - OnNext(322, 11), - OnNext(323, 11), - OnNext(324, 11), - OnNext(330, 12), - OnNext(331, 12), - OnNext(332, 12), - OnNext(333, 12), - OnNext(334, 12), - OnCompleted(355) + OnNext(215, "0hat"), + OnNext(217, "0bat"), + OnNext(219, "1hat"), + OnNext(300, "3wag"), + OnNext(300, "3pig"), + OnNext(305, "3cup"), + OnNext(310, "4wag"), + OnNext(310, "4pig"), + OnNext(310, "4cup"), + OnNext(702, "6tin"), + OnNext(710, "7tin"), + OnNext(712, "7man"), + OnNext(712, "6man"), + OnNext(720, "8tin"), + OnNext(720, "8man"), + OnError(721, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 305) - ); - - ysn.Subscriptions.AssertEqual( - Subscribe(300, 340), - Subscribe(301, 341), - Subscribe(302, 342), - Subscribe(303, 343), - Subscribe(304, 344) + Subscribe(200, 721) ); - yse.Subscriptions.AssertEqual( + ys.Subscriptions.AssertEqual( + Subscribe(200, 721) ); - ysc.Subscriptions.AssertEqual( - Subscribe(305, 355) - ); + AssertDurations(xs, xsd, 721); + AssertDurations(ys, ysd, 721); } [TestMethod] - public void SelectMany_Triple_InnersWithTiming3() + public void JoinOp_Error_V() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(400, 1), - OnNext(500, 2), - OnNext(600, 3), - OnNext(700, 4), - OnCompleted(800) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); - var ysn = scheduler.CreateColdObservable( - OnNext(10, 10), - OnNext(20, 11), - OnNext(30, 12), - OnCompleted(40) + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); - var yse = scheduler.CreateColdObservable( - OnNext(0, 99), - OnCompleted(10) - ); + var ex = new Exception(); - var ysc = scheduler.CreateColdObservable( - OnNext(10, 42), - OnCompleted(100) - ); + var ysd = new List>(); var res = scheduler.Start(() => - xs.SelectMany( - x => ysn, - ex => yse, - () => ysc - ) + xs.Join(ys, x => { if (x.Value >= 0) throw ex; return Observable.Empty(); }, y => NewTimer(ysd, y.Interval, scheduler), (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnNext(310, 10), - OnNext(320, 11), - OnNext(330, 12), - OnNext(410, 10), - OnNext(420, 11), - OnNext(430, 12), - OnNext(510, 10), - OnNext(520, 11), - OnNext(530, 12), - OnNext(610, 10), - OnNext(620, 11), - OnNext(630, 12), - OnNext(710, 10), - OnNext(720, 11), - OnNext(730, 12), - OnNext(810, 42), - OnCompleted(900) + OnError(210, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 800) - ); - - ysn.Subscriptions.AssertEqual( - Subscribe(300, 340), - Subscribe(400, 440), - Subscribe(500, 540), - Subscribe(600, 640), - Subscribe(700, 740) + Subscribe(200, 210) ); - yse.Subscriptions.AssertEqual( + ys.Subscriptions.AssertEqual( + Subscribe(200, 210) ); - ysc.Subscriptions.AssertEqual( - Subscribe(800, 900) - ); + AssertDurations(ys, ysd, 210); } [TestMethod] - public void SelectMany_Triple_Error_Identity() + public void JoinOp_Error_VI() { var scheduler = new TestScheduler(); - var ex = new Exception(); - var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnError(305, ex) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); + var ex = new Exception(); + + var xsd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Return(x, scheduler), - ex1 => Observable.Throw(ex1, scheduler), - () => Observable.Empty(scheduler) - ) + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => { if (y.Value.Length >= 0) throw ex; return Observable.Empty(); }, (x, y) => x.Value + y.Value) ); res.Messages.AssertEqual( - OnNext(301, 0), - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(305, 4), - OnError(306, ex) + OnError(215, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 305) + Subscribe(200, 215) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 215) ); + + AssertDurations(xs, xsd, 215); } [TestMethod] - public void SelectMany_Triple_SelectMany() + public void JoinOp_Error_VII() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) - ); - - var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Repeat(x, x, scheduler), - ex => Observable.Throw(ex, scheduler), - () => Observable.Empty(scheduler) - ) + OnNext(215, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) ); - res.Messages.AssertEqual( - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(304, 2), - OnNext(305, 4), - OnNext(305, 3), - OnNext(306, 4), - OnNext(306, 3), - OnNext(307, 4), - OnNext(308, 4), - OnCompleted(308) - ); - - xs.Subscriptions.AssertEqual( - Subscribe(200, 305) + var ys = scheduler.CreateHotObservable( + OnNext(210, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); - } + var ex = new Exception(); - [TestMethod] - public void SelectMany_Triple_Concat() - { - var scheduler = new TestScheduler(); - - var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) - ); + var xsd = new List>(); + var ysd = new List>(); var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Return(x, scheduler), - ex => Observable.Throw(ex, scheduler), - () => Observable.Range(1, 3, scheduler) - ) + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => { if (x.Value >= 0) throw ex; return x.Value + y.Value; }) ); res.Messages.AssertEqual( - OnNext(301, 0), - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(305, 4), - OnNext(306, 1), - OnNext(307, 2), - OnNext(308, 3), - OnCompleted(309) + OnError(215, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 305) + Subscribe(200, 215) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 215) ); + + AssertDurations(xs, xsd, 215); + AssertDurations(ys, ysd, 215); } [TestMethod] - public void SelectMany_Triple_Catch() + public void JoinOp_Error_VIII() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) + OnNext(210, new TimeInterval(0, TimeSpan.FromTicks(10))), + OnNext(219, new TimeInterval(1, TimeSpan.FromTicks(5))), + OnNext(240, new TimeInterval(2, TimeSpan.FromTicks(10))), + OnNext(300, new TimeInterval(3, TimeSpan.FromTicks(100))), + OnNext(310, new TimeInterval(4, TimeSpan.FromTicks(80))), + OnNext(500, new TimeInterval(5, TimeSpan.FromTicks(90))), + OnNext(700, new TimeInterval(6, TimeSpan.FromTicks(25))), + OnNext(710, new TimeInterval(7, TimeSpan.FromTicks(300))), + OnNext(720, new TimeInterval(8, TimeSpan.FromTicks(100))), + OnNext(830, new TimeInterval(9, TimeSpan.FromTicks(10))), + OnCompleted>(900) + ); + + var ys = scheduler.CreateHotObservable( + OnNext(215, new TimeInterval("hat", TimeSpan.FromTicks(20))), + OnNext(217, new TimeInterval("bat", TimeSpan.FromTicks(1))), + OnNext(290, new TimeInterval("wag", TimeSpan.FromTicks(200))), + OnNext(300, new TimeInterval("pig", TimeSpan.FromTicks(10))), + OnNext(305, new TimeInterval("cup", TimeSpan.FromTicks(50))), + OnNext(600, new TimeInterval("yak", TimeSpan.FromTicks(90))), + OnNext(702, new TimeInterval("tin", TimeSpan.FromTicks(20))), + OnNext(712, new TimeInterval("man", TimeSpan.FromTicks(10))), + OnNext(722, new TimeInterval("rat", TimeSpan.FromTicks(200))), + OnNext(732, new TimeInterval("wig", TimeSpan.FromTicks(5))), + OnCompleted>(800) ); + var ex = new Exception(); + + var xsd = new List>(); + var ysd = new List>(); + var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Return(x, scheduler), - ex => Observable.Range(1, 3, scheduler), - () => Observable.Empty(scheduler) - ) + xs.Join(ys, x => NewTimer(xsd, x.Interval, scheduler), y => NewTimer(ysd, y.Interval, scheduler), (x, y) => { if (x.Value >= 0) throw ex; return x.Value + y.Value; }) ); res.Messages.AssertEqual( - OnNext(301, 0), - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(305, 4), - OnCompleted(306) + OnError(215, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 305) + Subscribe(200, 215) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(200, 215) ); + + AssertDurations(xs, xsd, 215); + AssertDurations(ys, ysd, 215); } - [TestMethod] - public void SelectMany_Triple_Error_Catch() + private ITestableObservable NewTimer(List> l, TimeSpan t, TestScheduler scheduler) { - var scheduler = new TestScheduler(); + var timer = scheduler.CreateColdObservable(OnNext(t.Ticks, 0L), OnCompleted(t.Ticks)); + l.Add(timer); + return timer; + } - var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnError(305, new Exception()) - ); + private void AssertDurations(ITestableObservable> xs, List> xsd, long lastEnd) + { + Assert.AreEqual(xs.Messages.Where(x => x.Value.Kind == NotificationKind.OnNext && x.Time <= lastEnd).Count(), xsd.Count); - var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Return(x, scheduler), - ex => Observable.Range(1, 3, scheduler), - () => Observable.Empty(scheduler) - ) - ); + foreach (var pair in xs.Messages.Zip(xsd, (x, y) => new { Item1 = x, Item2 = y })) + { + var start = pair.Item1.Time; + var end = Math.Min(start + pair.Item1.Value.Value.Interval.Ticks, lastEnd); + pair.Item2.Subscriptions.AssertEqual( + Subscribe(start, end) + ); + } + } - res.Messages.AssertEqual( - OnNext(301, 0), - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(305, 4), - OnNext(306, 1), - OnNext(307, 2), - OnNext(308, 3), - OnCompleted(309) - ); + #endregion - xs.Subscriptions.AssertEqual( - Subscribe(200, 305) - ); + #region + OfType + + + [TestMethod] + public void OfType_ArgumentChecking() + { + ReactiveAssert.Throws(() => Observable.OfType(default(IObservable))); + ReactiveAssert.Throws(() => Observable.OfType(DummyObservable.Instance).Subscribe(null)); } [TestMethod] - public void SelectMany_Triple_All() + public void OfType_Complete() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) + var xs = scheduler.CreateHotObservable( + OnNext(210, new B(0)), + OnNext(220, new A(1)), + OnNext(230, new E(2)), + OnNext(240, new D(3)), + OnNext(250, new C(4)), + OnNext(260, new B(5)), + OnNext(270, new B(6)), + OnNext(280, new D(7)), + OnNext(290, new A(8)), + OnNext(300, new E(9)), + OnNext(310, 3), + OnNext(320, "foo"), + OnNext(330, true), + OnNext(340, new B(10)), + OnCompleted(350) ); var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Repeat(x, x, scheduler), - ex => Observable.Repeat(0, 2, scheduler), - () => Observable.Repeat(-1, 2, scheduler) - ) + xs.OfType() ); res.Messages.AssertEqual( - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(304, 2), - OnNext(305, 4), - OnNext(305, 3), - OnNext(306, -1), - OnNext(306, 4), - OnNext(306, 3), - OnNext(307, -1), - OnNext(307, 4), - OnNext(308, 4), - OnCompleted(308) + OnNext(210, new B(0)), + OnNext(240, new D(3)), + OnNext(260, new B(5)), + OnNext(270, new B(6)), + OnNext(280, new D(7)), + OnNext(340, new B(10)), + OnCompleted(350) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 305) + Subscribe(200, 350) ); } [TestMethod] - public void SelectMany_Triple_Error_All() + public void OfType_Error() { var scheduler = new TestScheduler(); - var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnError(305, new Exception()) - ); + var ex = new Exception(); - var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Repeat(x, x, scheduler), - ex => Observable.Repeat(0, 2, scheduler), - () => Observable.Repeat(-1, 2, scheduler) - ) + var xs = scheduler.CreateHotObservable( + OnNext(210, new B(0)), + OnNext(220, new A(1)), + OnNext(230, new E(2)), + OnNext(240, new D(3)), + OnNext(250, new C(4)), + OnNext(260, new B(5)), + OnNext(270, new B(6)), + OnNext(280, new D(7)), + OnNext(290, new A(8)), + OnNext(300, new E(9)), + OnNext(310, 3), + OnNext(320, "foo"), + OnNext(330, true), + OnNext(340, new B(10)), + OnError(350, ex) + ); + + var res = scheduler.Start(() => + xs.OfType() ); res.Messages.AssertEqual( - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(304, 2), - OnNext(305, 4), - OnNext(305, 3), - OnNext(306, 0), - OnNext(306, 4), - OnNext(306, 3), - OnNext(307, 0), - OnNext(307, 4), - OnNext(308, 4), - OnCompleted(308) + OnNext(210, new B(0)), + OnNext(240, new D(3)), + OnNext(260, new B(5)), + OnNext(270, new B(6)), + OnNext(280, new D(7)), + OnNext(340, new B(10)), + OnError(350, ex) ); xs.Subscriptions.AssertEqual( - Subscribe(200, 305) + Subscribe(200, 350) ); } [TestMethod] - public void SelectMany_Triple_All_Dispose() + public void OfType_Dispose() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, new B(0)), + OnNext(220, new A(1)), + OnNext(230, new E(2)), + OnNext(240, new D(3)), + OnNext(250, new C(4)), + OnNext(260, new B(5)), + OnNext(270, new B(6)), + OnNext(280, new D(7)), + OnNext(290, new A(8)), + OnNext(300, new E(9)), + OnNext(310, 3), + OnNext(320, "foo"), + OnNext(330, true), + OnNext(340, new B(10)), + OnError(350, new Exception()) + ); + + var res = scheduler.Start(() => + xs.OfType(), + 275 + ); + + res.Messages.AssertEqual( + OnNext(210, new B(0)), + OnNext(240, new D(3)), + OnNext(260, new B(5)), + OnNext(270, new B(6)) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 275) + ); + } + + #endregion + + #region + Select + + + [TestMethod] + public void Select_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).Select(DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.Select((Func)null)); + ReactiveAssert.Throws(() => DummyObservable.Instance.Select(DummyFunc.Instance).Subscribe(null)); + } + + [TestMethod] + public void Select_Throws() + { + ReactiveAssert.Throws(() => + Observable.Return(1).Select(x => x).Subscribe( + x => + { + throw new InvalidOperationException(); + })); + ReactiveAssert.Throws(() => + Observable.Throw(new Exception()).Select(x => x).Subscribe( + x => { }, + exception => + { + throw new InvalidOperationException(); + })); + ReactiveAssert.Throws(() => + Observable.Empty().Select(x => x).Subscribe( + x => { }, + exception => { }, + () => + { + throw new InvalidOperationException(); + })); + ReactiveAssert.Throws(() => Observable.Create(new Func, Action>(o => { throw new InvalidOperationException(); })).Select(x => x).Subscribe()); + } + + [TestMethod] + public void Select_DisposeInsideSelector() { var scheduler = new TestScheduler(); var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) + OnNext(100, 1), + OnNext(200, 2), + OnNext(500, 3), + OnNext(600, 4) + ); + + var invoked = 0; + + var res = scheduler.CreateObserver(); + + var d = new SerialDisposable(); + d.Disposable = xs.Select(x => + { + invoked++; + if (scheduler.Clock > 400) + d.Dispose(); + return x; + }).Subscribe(res); + + scheduler.ScheduleAbsolute(Disposed, d.Dispose); + + scheduler.Start(); + + res.Messages.AssertEqual( + OnNext(100, 1), + OnNext(200, 2) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(0, 500) + ); + + Assert.AreEqual(3, invoked); + } + + [TestMethod] + public void Select_Completed() + { + var scheduler = new TestScheduler(); + + var invoked = 0; + + var xs = scheduler.CreateHotObservable( + OnNext(180, 1), + OnNext(210, 2), + OnNext(240, 3), + OnNext(290, 4), + OnNext(350, 5), + OnCompleted(400), + OnNext(410, -1), + OnCompleted(420), + OnError(430, new Exception()) ); var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Repeat(x, x, scheduler), - ex => Observable.Repeat(0, 2, scheduler), - () => Observable.Repeat(-1, 2, scheduler) - ), - 307 + xs.Select(x => + { + invoked++; + return x + 1; + }) ); res.Messages.AssertEqual( - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(304, 2), - OnNext(305, 4), - OnNext(305, 3), - OnNext(306, -1), - OnNext(306, 4), - OnNext(306, 3) + OnNext(210, 3), + OnNext(240, 4), + OnNext(290, 5), + OnNext(350, 6), + OnCompleted(400) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 400) + ); + + Assert.AreEqual(4, invoked); + } + + [TestMethod] + public void Select_NotCompleted() + { + var scheduler = new TestScheduler(); + + var invoked = 0; + + var xs = scheduler.CreateHotObservable( + OnNext(180, 1), + OnNext(210, 2), + OnNext(240, 3), + OnNext(290, 4), + OnNext(350, 5) + ); + + var res = scheduler.Start(() => + xs.Select(x => + { + invoked++; + return x + 1; + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 3), + OnNext(240, 4), + OnNext(290, 5), + OnNext(350, 6) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 1000) ); - xs.Subscriptions.AssertEqual( - Subscribe(200, 305) - ); - } + Assert.AreEqual(4, invoked); + } + + [TestMethod] + public void Select_Error() + { + var scheduler = new TestScheduler(); + + var invoked = 0; + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(180, 1), + OnNext(210, 2), + OnNext(240, 3), + OnNext(290, 4), + OnNext(350, 5), + OnError(400, ex), + OnNext(410, -1), + OnCompleted(420), + OnError(430, new Exception()) + ); + + var res = scheduler.Start(() => + xs.Select(x => + { + invoked++; + return x + 1; + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 3), + OnNext(240, 4), + OnNext(290, 5), + OnNext(350, 6), + OnError(400, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 400) + ); + + Assert.AreEqual(4, invoked); + } + + [TestMethod] + public void Select_SelectorThrows() + { + var scheduler = new TestScheduler(); + + var invoked = 0; + + var xs = scheduler.CreateHotObservable( + OnNext(180, 1), + OnNext(210, 2), + OnNext(240, 3), + OnNext(290, 4), + OnNext(350, 5), + OnCompleted(400), + OnNext(410, -1), + OnCompleted(420), + OnError(430, new Exception()) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.Select(x => + { + invoked++; + if (invoked == 3) + throw ex; + return x + 1; + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 3), + OnNext(240, 4), + OnError(290, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 290) + ); + + Assert.AreEqual(3, invoked); + } + + [TestMethod] + public void SelectWithIndex_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).Select(DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.Select((Func)null)); + ReactiveAssert.Throws(() => DummyObservable.Instance.Select(DummyFunc.Instance).Subscribe(null)); + } + + [TestMethod] + public void SelectWithIndex_Throws() + { + ReactiveAssert.Throws(() => + Observable.Return(1).Select((x, index) => x).Subscribe( + x => + { + throw new InvalidOperationException(); + })); + ReactiveAssert.Throws(() => + Observable.Throw(new Exception()).Select((x, index) => x).Subscribe( + x => { }, + exception => + { + throw new InvalidOperationException(); + })); + ReactiveAssert.Throws(() => + Observable.Empty().Select((x, index) => x).Subscribe( + x => { }, + exception => { }, + () => + { + throw new InvalidOperationException(); + })); + ReactiveAssert.Throws(() => Observable.Create(new Func, Action>(o => { throw new InvalidOperationException(); })).Select((x, index) => x).Subscribe()); + } + + [TestMethod] + public void SelectWithIndex_DisposeInsideSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(100, 4), + OnNext(200, 3), + OnNext(500, 2), + OnNext(600, 1) + ); + + var invoked = 0; + + var res = scheduler.CreateObserver(); + + var d = new SerialDisposable(); + d.Disposable = xs.Select((x, index) => + { + invoked++; + if (scheduler.Clock > 400) + d.Dispose(); + return x + index * 10; + }).Subscribe(res); + + scheduler.ScheduleAbsolute(Disposed, d.Dispose); + + scheduler.Start(); + + res.Messages.AssertEqual( + OnNext(100, 4), + OnNext(200, 13) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(0, 500) + ); + + Assert.AreEqual(3, invoked); + } + + [TestMethod] + public void SelectWithIndex_Completed() + { + var scheduler = new TestScheduler(); + + var invoked = 0; + + var xs = scheduler.CreateHotObservable( + OnNext(180, 5), + OnNext(210, 4), + OnNext(240, 3), + OnNext(290, 2), + OnNext(350, 1), + OnCompleted(400), + OnNext(410, -1), + OnCompleted(420), + OnError(430, new Exception()) + ); + + var res = scheduler.Start(() => + xs.Select((x, index) => + { + invoked++; + return (x + 1) + (index * 10); + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 5), + OnNext(240, 14), + OnNext(290, 23), + OnNext(350, 32), + OnCompleted(400) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 400) + ); + + Assert.AreEqual(4, invoked); + } + + [TestMethod] + public void SelectWithIndex_NotCompleted() + { + var scheduler = new TestScheduler(); + + var invoked = 0; + + var xs = scheduler.CreateHotObservable( + OnNext(180, 5), + OnNext(210, 4), + OnNext(240, 3), + OnNext(290, 2), + OnNext(350, 1) + ); + + var res = scheduler.Start(() => + xs.Select((x, index) => + { + invoked++; + return (x + 1) + (index * 10); + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 5), + OnNext(240, 14), + OnNext(290, 23), + OnNext(350, 32) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 1000) + ); + + Assert.AreEqual(4, invoked); + } + + [TestMethod] + public void SelectWithIndex_Error() + { + var scheduler = new TestScheduler(); + + var invoked = 0; + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(180, 5), + OnNext(210, 4), + OnNext(240, 3), + OnNext(290, 2), + OnNext(350, 1), + OnError(400, ex), + OnNext(410, -1), + OnCompleted(420), + OnError(430, new Exception()) + ); + + var res = scheduler.Start(() => + xs.Select((x, index) => + { + invoked++; + return (x + 1) + (index * 10); + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 5), + OnNext(240, 14), + OnNext(290, 23), + OnNext(350, 32), + OnError(400, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 400) + ); + + Assert.AreEqual(4, invoked); + } + + [TestMethod] + public void SelectWithIndex_SelectorThrows() + { + var scheduler = new TestScheduler(); + + var invoked = 0; + + var xs = scheduler.CreateHotObservable( + OnNext(180, 5), + OnNext(210, 4), + OnNext(240, 3), + OnNext(290, 2), + OnNext(350, 1), + OnCompleted(400), + OnNext(410, -1), + OnCompleted(420), + OnError(430, new Exception()) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.Select((x, index) => + { + invoked++; + if (invoked == 3) + throw ex; + return (x + 1) + (index * 10); + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 5), + OnNext(240, 14), + OnError(290, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 290) + ); + + Assert.AreEqual(3, invoked); + } + + [TestMethod] + public void Select_Select1() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(180, 5), + OnNext(210, 4), + OnNext(240, 3), + OnNext(290, 2), + OnNext(350, 1), + OnCompleted(400) + ); + + var res = scheduler.Start(() => + xs.Select(x => x + 1).Select(x => x - 2) + ); + + res.Messages.AssertEqual( + OnNext(210, 4 + 1 - 2), + OnNext(240, 3 + 1 - 2), + OnNext(290, 2 + 1 - 2), + OnNext(350, 1 + 1 - 2), + OnCompleted(400) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 400) + ); + } + + [TestMethod] + public void Select_Select2() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(180, 5), + OnNext(210, 4), + OnNext(240, 3), + OnNext(290, 2), + OnNext(350, 1), + OnCompleted(400) + ); + + var res = scheduler.Start(() => + xs.Select((x, i) => x + i).Select(x => x - 2) + ); + + res.Messages.AssertEqual( + OnNext(210, 4 + 0 - 2), + OnNext(240, 3 + 1 - 2), + OnNext(290, 2 + 2 - 2), + OnNext(350, 1 + 3 - 2), + OnCompleted(400) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 400) + ); + } + + [TestMethod] + public void Select_Select3() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(180, 5), + OnNext(210, 4), + OnNext(240, 3), + OnNext(290, 2), + OnNext(350, 1), + OnCompleted(400) + ); + + var res = scheduler.Start(() => + xs.Select(x => x + 1).Select((x, i) => x - i) + ); + + res.Messages.AssertEqual( + OnNext(210, 4 + 1 - 0), + OnNext(240, 3 + 1 - 1), + OnNext(290, 2 + 1 - 2), + OnNext(350, 1 + 1 - 3), + OnCompleted(400) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 400) + ); + } + + [TestMethod] + public void Select_Select4() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(180, 5), + OnNext(210, 4), + OnNext(240, 3), + OnNext(290, 2), + OnNext(350, 1), + OnCompleted(400) + ); + + var res = scheduler.Start(() => + xs.Select((x, i) => x + i).Select((x, i) => x - i) + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(240, 3), + OnNext(290, 2), + OnNext(350, 1), + OnCompleted(400) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 400) + ); + } + + #endregion + + #region + SelectMany + + + [TestMethod] + public void SelectMany_Then_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyObservable.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(((IObservable)null))); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyObservable.Instance).Subscribe(null)); + } + + [TestMethod] + public void SelectMany_Then_Complete_Complete() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateColdObservable( + OnNext(100, 4), + OnNext(200, 2), + OnNext(300, 3), + OnNext(400, 1), + OnCompleted(500) + ); + + var ys = scheduler.CreateColdObservable( + OnNext(50, "foo"), + OnNext(100, "bar"), + OnNext(150, "baz"), + OnNext(200, "qux"), + OnCompleted(250) + ); + + var res = scheduler.Start(() => + xs.SelectMany(ys) + ); + + res.Messages.AssertEqual( + OnNext(350, "foo"), + OnNext(400, "bar"), + OnNext(450, "baz"), + OnNext(450, "foo"), + OnNext(500, "qux"), + OnNext(500, "bar"), + OnNext(550, "baz"), + OnNext(550, "foo"), + OnNext(600, "qux"), + OnNext(600, "bar"), + OnNext(650, "baz"), + OnNext(650, "foo"), + OnNext(700, "qux"), + OnNext(700, "bar"), + OnNext(750, "baz"), + OnNext(800, "qux"), + OnCompleted(850) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 700) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(300, 550), + Subscribe(400, 650), + Subscribe(500, 750), + Subscribe(600, 850) + ); + } + + [TestMethod] + public void SelectMany_Then_Complete_Complete_2() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateColdObservable( + OnNext(100, 4), + OnNext(200, 2), + OnNext(300, 3), + OnNext(400, 1), + OnCompleted(700) + ); + + var ys = scheduler.CreateColdObservable( + OnNext(50, "foo"), + OnNext(100, "bar"), + OnNext(150, "baz"), + OnNext(200, "qux"), + OnCompleted(250) + ); + + var res = scheduler.Start(() => + xs.SelectMany(ys) + ); + + res.Messages.AssertEqual( + OnNext(350, "foo"), + OnNext(400, "bar"), + OnNext(450, "baz"), + OnNext(450, "foo"), + OnNext(500, "qux"), + OnNext(500, "bar"), + OnNext(550, "baz"), + OnNext(550, "foo"), + OnNext(600, "qux"), + OnNext(600, "bar"), + OnNext(650, "baz"), + OnNext(650, "foo"), + OnNext(700, "qux"), + OnNext(700, "bar"), + OnNext(750, "baz"), + OnNext(800, "qux"), + OnCompleted(900) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 900) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(300, 550), + Subscribe(400, 650), + Subscribe(500, 750), + Subscribe(600, 850) + ); + } + + [TestMethod] + public void SelectMany_Then_Never_Complete() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateColdObservable( + OnNext(100, 4), + OnNext(200, 2), + OnNext(300, 3), + OnNext(400, 1), + OnNext(500, 5), + OnNext(700, 0) + ); + + var ys = scheduler.CreateColdObservable( + OnNext(50, "foo"), + OnNext(100, "bar"), + OnNext(150, "baz"), + OnNext(200, "qux"), + OnCompleted(250) + ); + + var res = scheduler.Start(() => + xs.SelectMany(ys) + ); + + res.Messages.AssertEqual( + OnNext(350, "foo"), + OnNext(400, "bar"), + OnNext(450, "baz"), + OnNext(450, "foo"), + OnNext(500, "qux"), + OnNext(500, "bar"), + OnNext(550, "baz"), + OnNext(550, "foo"), + OnNext(600, "qux"), + OnNext(600, "bar"), + OnNext(650, "baz"), + OnNext(650, "foo"), + OnNext(700, "qux"), + OnNext(700, "bar"), + OnNext(750, "baz"), + OnNext(750, "foo"), + OnNext(800, "qux"), + OnNext(800, "bar"), + OnNext(850, "baz"), + OnNext(900, "qux"), + OnNext(950, "foo") + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 1000) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(300, 550), + Subscribe(400, 650), + Subscribe(500, 750), + Subscribe(600, 850), + Subscribe(700, 950), + Subscribe(900, 1000) + ); + } + + [TestMethod] + public void SelectMany_Then_Complete_Never() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateColdObservable( + OnNext(100, 4), + OnNext(200, 2), + OnNext(300, 3), + OnNext(400, 1), + OnCompleted(500) + ); + + var ys = scheduler.CreateColdObservable( + OnNext(50, "foo"), + OnNext(100, "bar"), + OnNext(150, "baz"), + OnNext(200, "qux") + ); + + var res = scheduler.Start(() => + xs.SelectMany(ys) + ); + + res.Messages.AssertEqual( + OnNext(350, "foo"), + OnNext(400, "bar"), + OnNext(450, "baz"), + OnNext(450, "foo"), + OnNext(500, "qux"), + OnNext(500, "bar"), + OnNext(550, "baz"), + OnNext(550, "foo"), + OnNext(600, "qux"), + OnNext(600, "bar"), + OnNext(650, "baz"), + OnNext(650, "foo"), + OnNext(700, "qux"), + OnNext(700, "bar"), + OnNext(750, "baz"), + OnNext(800, "qux") + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 700) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(300, 1000), + Subscribe(400, 1000), + Subscribe(500, 1000), + Subscribe(600, 1000) + ); + } + + [TestMethod] + public void SelectMany_Then_Complete_Error() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateColdObservable( + OnNext(100, 4), + OnNext(200, 2), + OnNext(300, 3), + OnNext(400, 1), + OnCompleted(500) + ); + + var ys = scheduler.CreateColdObservable( + OnNext(50, "foo"), + OnNext(100, "bar"), + OnNext(150, "baz"), + OnNext(200, "qux"), + OnError(300, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany(ys) + ); + + res.Messages.AssertEqual( + OnNext(350, "foo"), + OnNext(400, "bar"), + OnNext(450, "baz"), + OnNext(450, "foo"), + OnNext(500, "qux"), + OnNext(500, "bar"), + OnNext(550, "baz"), + OnNext(550, "foo"), + OnError(600, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 600) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(300, 600), + Subscribe(400, 600), + Subscribe(500, 600), + Subscribe(600, 600) + ); + } + + [TestMethod] + public void SelectMany_Then_Error_Complete() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateColdObservable( + OnNext(100, 4), + OnNext(200, 2), + OnNext(300, 3), + OnNext(400, 1), + OnError(500, ex) + ); + + var ys = scheduler.CreateColdObservable( + OnNext(50, "foo"), + OnNext(100, "bar"), + OnNext(150, "baz"), + OnNext(200, "qux"), + OnCompleted(250) + ); + + var res = scheduler.Start(() => + xs.SelectMany(ys) + ); + + res.Messages.AssertEqual( + OnNext(350, "foo"), + OnNext(400, "bar"), + OnNext(450, "baz"), + OnNext(450, "foo"), + OnNext(500, "qux"), + OnNext(500, "bar"), + OnNext(550, "baz"), + OnNext(550, "foo"), + OnNext(600, "qux"), + OnNext(600, "bar"), + OnNext(650, "baz"), + OnNext(650, "foo"), + OnError(700, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 700) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(300, 550), + Subscribe(400, 650), + Subscribe(500, 700), + Subscribe(600, 700) + ); + } + + [TestMethod] + public void SelectMany_Then_Error_Error() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateColdObservable( + OnNext(100, 4), + OnNext(200, 2), + OnNext(300, 3), + OnNext(400, 1), + OnError(500, new Exception()) + ); + + var ys = scheduler.CreateColdObservable( + OnNext(50, "foo"), + OnNext(100, "bar"), + OnNext(150, "baz"), + OnNext(200, "qux"), + OnError(250, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany(ys) + ); + + res.Messages.AssertEqual( + OnNext(350, "foo"), + OnNext(400, "bar"), + OnNext(450, "baz"), + OnNext(450, "foo"), + OnNext(500, "qux"), + OnNext(500, "bar"), + OnError(550, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 550) + ); + + ys.Subscriptions.AssertEqual( + Subscribe(300, 550), + Subscribe(400, 550), + Subscribe(500, 550) + ); + } + + [TestMethod] + public void SelectMany_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance).Subscribe(null)); + } + + [TestMethod] + public void SelectMany_Complete() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnCompleted>(900) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => x) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303), + OnNext(740, 106), + OnNext(810, 304), + OnNext(860, 305), + OnNext(930, 401), + OnNext(940, 402), + OnCompleted(960) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 900)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 760)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 605)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 960)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + Subscribe(750, 790)); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + Subscribe(850, 950)); + } + + [TestMethod] + public void SelectMany_Complete_InnerNotComplete() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnCompleted>(900) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => x) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303), + OnNext(740, 106), + OnNext(810, 304), + OnNext(860, 305), + OnNext(930, 401), + OnNext(940, 402) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 900)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 760)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 1000)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 960)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + Subscribe(750, 790)); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + Subscribe(850, 950)); + } + + [TestMethod] + public void SelectMany_Complete_OuterNotComplete() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => x) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303), + OnNext(740, 106), + OnNext(810, 304), + OnNext(860, 305), + OnNext(930, 401), + OnNext(940, 402) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 1000)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 760)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 605)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 960)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + Subscribe(750, 790)); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + Subscribe(850, 950)); + } + + [TestMethod] + public void SelectMany_Error_Outer() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnError>(900, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => x) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303), + OnNext(740, 106), + OnNext(810, 304), + OnNext(860, 305), + OnError(900, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 900)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 760)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 605)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 900)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + Subscribe(750, 790)); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + Subscribe(850, 900)); + } + + [TestMethod] + public void SelectMany_Error_Inner() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnError(460, ex))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnCompleted>(900) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => x) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303), + OnNext(740, 106), + OnError(760, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 760)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 760)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 605)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 760)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + Subscribe(750, 760)); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + ); + } + + [TestMethod] + public void SelectMany_Dispose() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnCompleted>(900) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => x), + 700 + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 700)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 700)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 605)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 700)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + ); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + ); + } + + [TestMethod] + public void SelectMany_Throw() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnCompleted>(900) + ); + + var invoked = 0; + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany(x => + { + invoked++; + if (invoked == 3) + throw ex; + return x; + }) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnError(550, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 550)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 550)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 550)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + ); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + ); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + ); + + Assert.AreEqual(3, invoked); + } + + [TestMethod] + public void SelectMany_UseFunction() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 4), + OnNext(220, 3), + OnNext(250, 5), + OnNext(270, 1), + OnCompleted(290) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => Observable.Interval(TimeSpan.FromTicks(10), scheduler).Select(_ => x).Take(x)) + ); + + res.Messages.AssertEqual( + OnNext(220, 4), + OnNext(230, 3), + OnNext(230, 4), + OnNext(240, 3), + OnNext(240, 4), + OnNext(250, 3), + OnNext(250, 4), + OnNext(260, 5), + OnNext(270, 5), + OnNext(280, 1), + OnNext(280, 5), + OnNext(290, 5), + OnNext(300, 5), + OnCompleted(300) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 290) + ); + } + + [TestMethod] + public void SelectManyWithIndex_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance).Subscribe(null)); + } + + [TestMethod] + public void SelectManyWithIndex_Index() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 4), + OnNext(220, 3), + OnNext(250, 5), + OnNext(270, 1), + OnCompleted(290) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, i) => Observable.Return(new { x, i })) + ); + + var witness = new { x = 0, i = 0 }; + + res.Messages.AssertEqual( + OnNext(210, new { x = 4, i = 0 }), + OnNext(220, new { x = 3, i = 1 }), + OnNext(250, new { x = 5, i = 2 }), + OnNext(270, new { x = 1, i = 3 }), + OnCompleted(290, witness) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 290) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Complete() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnCompleted>(900) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => x) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303), + OnNext(740, 106), + OnNext(810, 304), + OnNext(860, 305), + OnNext(930, 401), + OnNext(940, 402), + OnCompleted(960) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 900)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 760)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 605)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 960)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + Subscribe(750, 790)); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + Subscribe(850, 950)); + } + + [TestMethod] + public void SelectManyWithIndex_Complete_InnerNotComplete() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnCompleted>(900) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => x) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303), + OnNext(740, 106), + OnNext(810, 304), + OnNext(860, 305), + OnNext(930, 401), + OnNext(940, 402) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 900)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 760)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 1000)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 960)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + Subscribe(750, 790)); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + Subscribe(850, 950)); + } + + [TestMethod] + public void SelectManyWithIndex_Complete_OuterNotComplete() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => x) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303), + OnNext(740, 106), + OnNext(810, 304), + OnNext(860, 305), + OnNext(930, 401), + OnNext(940, 402) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 1000)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 760)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 605)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 960)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + Subscribe(750, 790)); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + Subscribe(850, 950)); + } + + [TestMethod] + public void SelectManyWithIndex_Error_Outer() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnError>(900, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => x) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303), + OnNext(740, 106), + OnNext(810, 304), + OnNext(860, 305), + OnError(900, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 900)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 760)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 605)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 900)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + Subscribe(750, 790)); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + Subscribe(850, 900)); + } + + [TestMethod] + public void SelectManyWithIndex_Error_Inner() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnError(460, ex))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnCompleted>(900) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => x) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303), + OnNext(740, 106), + OnError(760, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 760)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 760)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 605)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 760)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + Subscribe(750, 760)); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + ); + } + + [TestMethod] + public void SelectManyWithIndex_Dispose() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnCompleted>(900) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => x), + 700 + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnNext(560, 301), + OnNext(580, 202), + OnNext(590, 203), + OnNext(600, 302), + OnNext(620, 303) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 700)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 700)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 605)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + Subscribe(550, 700)); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + ); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + ); + } + + [TestMethod] + public void SelectManyWithIndex_Throw() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(5, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(105, scheduler.CreateColdObservable( + OnError(1, new InvalidOperationException()))), + OnNext(300, scheduler.CreateColdObservable( + OnNext(10, 102), + OnNext(90, 103), + OnNext(110, 104), + OnNext(190, 105), + OnNext(440, 106), + OnCompleted(460))), + OnNext(400, scheduler.CreateColdObservable( + OnNext(180, 202), + OnNext(190, 203), + OnCompleted(205))), + OnNext(550, scheduler.CreateColdObservable( + OnNext(10, 301), + OnNext(50, 302), + OnNext(70, 303), + OnNext(260, 304), + OnNext(310, 305), + OnCompleted(410))), + OnNext(750, scheduler.CreateColdObservable( + OnCompleted(40))), + OnNext(850, scheduler.CreateColdObservable( + OnNext(80, 401), + OnNext(90, 402), + OnCompleted(100))), + OnCompleted>(900) + ); + + var invoked = 0; + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => + { + invoked++; + if (invoked == 3) + throw ex; + return x; + }) + ); + + res.Messages.AssertEqual( + OnNext(310, 102), + OnNext(390, 103), + OnNext(410, 104), + OnNext(490, 105), + OnError(550, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 550)); + + xs.Messages[2].Value.Value.Subscriptions.AssertEqual( + Subscribe(300, 550)); + + xs.Messages[3].Value.Value.Subscriptions.AssertEqual( + Subscribe(400, 550)); + + xs.Messages[4].Value.Value.Subscriptions.AssertEqual( + ); + + xs.Messages[5].Value.Value.Subscriptions.AssertEqual( + ); + + xs.Messages[6].Value.Value.Subscriptions.AssertEqual( + ); + + Assert.AreEqual(3, invoked); + } + + [TestMethod] + public void SelectManyWithIndex_UseFunction() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 4), + OnNext(220, 3), + OnNext(250, 5), + OnNext(270, 1), + OnCompleted(290) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Observable.Interval(TimeSpan.FromTicks(10), scheduler).Select(__ => x).Take(x)) + ); + + res.Messages.AssertEqual( + OnNext(220, 4), + OnNext(230, 3), + OnNext(230, 4), + OnNext(240, 3), + OnNext(240, 4), + OnNext(250, 3), + OnNext(250, 4), + OnNext(260, 5), + OnNext(270, 5), + OnNext(280, 1), + OnNext(280, 5), + OnNext(290, 5), + OnNext(300, 5), + OnCompleted(300) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 290) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance).Subscribe(null)); + + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, (Func)null)); + } + + [TestMethod] + public void SelectMany_Enumerable_Complete() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var inners = new List>(); + + var res = scheduler.Start(() => + xs.SelectMany(x => + { + var ys = new MockEnumerable(scheduler, Enumerable.Repeat(x, x)); + inners.Add(ys); + return ys; + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 2), + OnNext(210, 2), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(420, 3), + OnNext(420, 3), + OnNext(420, 3), + OnNext(510, 2), + OnNext(510, 2), + OnCompleted(600) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 600) + ); + + Assert.AreEqual(4, inners.Count); + + inners[0].Subscriptions.AssertEqual( + Subscribe(210, 210) + ); + + inners[1].Subscriptions.AssertEqual( + Subscribe(340, 340) + ); + + inners[2].Subscriptions.AssertEqual( + Subscribe(420, 420) + ); + + inners[3].Subscriptions.AssertEqual( + Subscribe(510, 510) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_Complete_ResultSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => Enumerable.Repeat(x, x), (x, y) => x + y) + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(210, 4), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(420, 6), + OnNext(420, 6), + OnNext(420, 6), + OnNext(510, 4), + OnNext(510, 4), + OnCompleted(600) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 600) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_Error() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnError(600, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => Enumerable.Repeat(x, x)) + ); + + res.Messages.AssertEqual( + OnNext(210, 2), + OnNext(210, 2), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(420, 3), + OnNext(420, 3), + OnNext(420, 3), + OnNext(510, 2), + OnNext(510, 2), + OnError(600, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 600) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_Error_ResultSelector() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnError(600, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => Enumerable.Repeat(x, x), (x, y) => x + y) + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(210, 4), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(420, 6), + OnNext(420, 6), + OnNext(420, 6), + OnNext(510, 4), + OnNext(510, 4), + OnError(600, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 600) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_Dispose() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => Enumerable.Repeat(x, x)), + 350 + ); + + res.Messages.AssertEqual( + OnNext(210, 2), + OnNext(210, 2), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 350) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_Dispose_ResultSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var res = scheduler.Start(() => + xs.SelectMany(x => Enumerable.Repeat(x, x), (x, y) => x + y), + 350 + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(210, 4), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 350) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_SelectorThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var invoked = 0; + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany(x => + { + invoked++; + if (invoked == 3) + throw ex; + + return Enumerable.Repeat(x, x); + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 2), + OnNext(210, 2), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnError(420, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) + ); + + Assert.AreEqual(3, invoked); + } + + [TestMethod] + public void SelectMany_Enumerable_ResultSelectorThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var inners = new List>(); + + var res = scheduler.Start(() => + xs.SelectMany( + x => + { + var ys = new MockEnumerable(scheduler, Enumerable.Repeat(x, x)); + inners.Add(ys); + return ys; + }, + (x, y) => + { + if (x == 3) + throw ex; + + return x + y; + } + ) + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(210, 4), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnError(420, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) + ); + + Assert.AreEqual(3, inners.Count); + + inners[0].Subscriptions.AssertEqual( + Subscribe(210, 210) + ); + + inners[1].Subscriptions.AssertEqual( + Subscribe(340, 340) + ); + + inners[2].Subscriptions.AssertEqual( + Subscribe(420, 420) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_ResultSelector_GetEnumeratorThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany(x => new RogueEnumerable(ex), (x, y) => x + y) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_SelectorThrows_ResultSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var invoked = 0; + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany( + x => + { + invoked++; + if (invoked == 3) + throw ex; + + return Enumerable.Repeat(x, x); + }, + (x, y) => x + y + ) + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(210, 4), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnError(420, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) + ); + + Assert.AreEqual(3, invoked); + } + + class CurrentThrowsEnumerable : IEnumerable + { + IEnumerable e; + Exception ex; + + public CurrentThrowsEnumerable(IEnumerable e, Exception ex) + { + this.e = e; + this.ex = ex; + } + + public IEnumerator GetEnumerator() + { + return new Enumerator(e.GetEnumerator(), ex); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + class Enumerator : IEnumerator + { + IEnumerator e; + Exception ex; + + public Enumerator(IEnumerator e, Exception ex) + { + this.e = e; + this.ex = ex; + } + + public T Current + { + get { throw ex; } + } + + public void Dispose() + { + e.Dispose(); + } + + object System.Collections.IEnumerator.Current + { + get { return Current; } + } + + public bool MoveNext() + { + return e.MoveNext(); + } + + public void Reset() + { + e.Reset(); + } + } + } + + [TestMethod] + public void SelectMany_Enumerable_CurrentThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany(x => new CurrentThrowsEnumerable(Enumerable.Repeat(x, x), ex)) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_CurrentThrows_ResultSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany(x => new CurrentThrowsEnumerable(Enumerable.Repeat(x, x), ex), (x, y) => x + y) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + class MoveNextThrowsEnumerable : IEnumerable + { + IEnumerable e; + Exception ex; + + public MoveNextThrowsEnumerable(IEnumerable e, Exception ex) + { + this.e = e; + this.ex = ex; + } + + public IEnumerator GetEnumerator() + { + return new Enumerator(e.GetEnumerator(), ex); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + class Enumerator : IEnumerator + { + IEnumerator e; + Exception ex; + + public Enumerator(IEnumerator e, Exception ex) + { + this.e = e; + this.ex = ex; + } + + public T Current + { + get { return e.Current; } + } + + public void Dispose() + { + e.Dispose(); + } + + object System.Collections.IEnumerator.Current + { + get { return Current; } + } + + public bool MoveNext() + { + throw ex; + } + + public void Reset() + { + e.Reset(); + } + } + } + + [TestMethod] + public void SelectMany_Enumerable_GetEnumeratorThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany(x => new RogueEnumerable(ex)) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_MoveNextThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany(x => new MoveNextThrowsEnumerable(Enumerable.Repeat(x, x), ex)) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectMany_Enumerable_MoveNextThrows_ResultSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany(x => new MoveNextThrowsEnumerable(Enumerable.Repeat(x, x), ex), (x, y) => x + y) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance).Subscribe(null)); + + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, (Func)null)); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_Index() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 4), + OnNext(220, 3), + OnNext(250, 5), + OnNext(270, 1), + OnCompleted(290) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, i) => new[] { new { x, i } }) + ); + + var witness = new { x = 0, i = 0 }; + + res.Messages.AssertEqual( + OnNext(210, new { x = 4, i = 0 }), + OnNext(220, new { x = 3, i = 1 }), + OnNext(250, new { x = 5, i = 2 }), + OnNext(270, new { x = 1, i = 3 }), + OnCompleted(290, witness) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 290) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_ResultSelector_Index() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 4), + OnNext(220, 3), + OnNext(250, 5), + OnNext(270, 1), + OnCompleted(290) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, i) => Enumerable.Range(10, i + 1), (x, i, y, j) => new { x, i, y, j }) + ); + + var witness = new { x = 0, i = 0, y = 0, j = 0 }; + + res.Messages.AssertEqual( + OnNext(210, new { x = 4, i = 0, y = 10, j = 0 }), + OnNext(220, new { x = 3, i = 1, y = 10, j = 0 }), + OnNext(220, new { x = 3, i = 1, y = 11, j = 1 }), + OnNext(250, new { x = 5, i = 2, y = 10, j = 0 }), + OnNext(250, new { x = 5, i = 2, y = 11, j = 1 }), + OnNext(250, new { x = 5, i = 2, y = 12, j = 2 }), + OnNext(270, new { x = 1, i = 3, y = 10, j = 0 }), + OnNext(270, new { x = 1, i = 3, y = 11, j = 1 }), + OnNext(270, new { x = 1, i = 3, y = 12, j = 2 }), + OnNext(270, new { x = 1, i = 3, y = 13, j = 3 }), + OnCompleted(290, witness) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 290) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_Complete() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var inners = new List>(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => + { + var ys = new MockEnumerable(scheduler, Enumerable.Repeat(x, x)); + inners.Add(ys); + return ys; + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 2), + OnNext(210, 2), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(420, 3), + OnNext(420, 3), + OnNext(420, 3), + OnNext(510, 2), + OnNext(510, 2), + OnCompleted(600) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 600) + ); + + Assert.AreEqual(4, inners.Count); + + inners[0].Subscriptions.AssertEqual( + Subscribe(210, 210) + ); + + inners[1].Subscriptions.AssertEqual( + Subscribe(340, 340) + ); + + inners[2].Subscriptions.AssertEqual( + Subscribe(420, 420) + ); + + inners[3].Subscriptions.AssertEqual( + Subscribe(510, 510) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_Complete_ResultSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Enumerable.Repeat(x, x), (x, _, y, __) => x + y) + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(210, 4), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(420, 6), + OnNext(420, 6), + OnNext(420, 6), + OnNext(510, 4), + OnNext(510, 4), + OnCompleted(600) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 600) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_Error() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnError(600, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Enumerable.Repeat(x, x)) + ); + + res.Messages.AssertEqual( + OnNext(210, 2), + OnNext(210, 2), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(420, 3), + OnNext(420, 3), + OnNext(420, 3), + OnNext(510, 2), + OnNext(510, 2), + OnError(600, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 600) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_Error_ResultSelector() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnError(600, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Enumerable.Repeat(x, x), (x, _, y, __) => x + y) + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(210, 4), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(420, 6), + OnNext(420, 6), + OnNext(420, 6), + OnNext(510, 4), + OnNext(510, 4), + OnError(600, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 600) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_Dispose() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Enumerable.Repeat(x, x)), + 350 + ); + + res.Messages.AssertEqual( + OnNext(210, 2), + OnNext(210, 2), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 350) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_Dispose_ResultSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Enumerable.Repeat(x, x), (x, _, y, __) => x + y), + 350 + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(210, 4), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 350) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_SelectorThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var invoked = 0; + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => + { + invoked++; + if (invoked == 3) + throw ex; + + return Enumerable.Repeat(x, x); + }) + ); + + res.Messages.AssertEqual( + OnNext(210, 2), + OnNext(210, 2), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnNext(340, 4), + OnError(420, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) + ); + + Assert.AreEqual(3, invoked); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_ResultSelectorThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var inners = new List>(); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => + { + var ys = new MockEnumerable(scheduler, Enumerable.Repeat(x, x)); + inners.Add(ys); + return ys; + }, + (x, _, y, __) => + { + if (x == 3) + throw ex; + + return x + y; + } + ) + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(210, 4), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnError(420, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) + ); + + Assert.AreEqual(3, inners.Count); + + inners[0].Subscriptions.AssertEqual( + Subscribe(210, 210) + ); + + inners[1].Subscriptions.AssertEqual( + Subscribe(340, 340) + ); + + inners[2].Subscriptions.AssertEqual( + Subscribe(420, 420) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_ResultSelector_GetEnumeratorThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => new RogueEnumerable(ex), (x, _, y, __) => x + y) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_SelectorThrows_ResultSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var invoked = 0; + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => + { + invoked++; + if (invoked == 3) + throw ex; + + return Enumerable.Repeat(x, x); + }, + (x, _, y, __) => x + y + ) + ); + + res.Messages.AssertEqual( + OnNext(210, 4), + OnNext(210, 4), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnNext(340, 8), + OnError(420, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 420) + ); + + Assert.AreEqual(3, invoked); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_CurrentThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => new CurrentThrowsEnumerable(Enumerable.Repeat(x, x), ex)) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_CurrentThrows_ResultSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => new CurrentThrowsEnumerable(Enumerable.Repeat(x, x), ex), (x, _, y, __) => x + y) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_GetEnumeratorThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => new RogueEnumerable(ex)) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_MoveNextThrows() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => new MoveNextThrowsEnumerable(Enumerable.Repeat(x, x), ex)) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Enumerable_MoveNextThrows_ResultSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 2), + OnNext(340, 4), + OnNext(420, 3), + OnNext(510, 2), + OnCompleted(600) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => new MoveNextThrowsEnumerable(Enumerable.Repeat(x, x), ex), (x, _, y, __) => x + y) + ); + + res.Messages.AssertEqual( + OnError(210, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 210) + ); + } + + [TestMethod] + public void SelectMany_QueryOperator_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, ((Func)null))); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, DummyFunc.Instance).Subscribe(null)); + +#if !NO_TPL + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, ((Func)null))); + + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, ((Func)null))); + + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); + + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); +#endif + } + + [TestMethod] + public void SelectMany_QueryOperator_CompleteOuterFirst() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(224) + ); + + var res = scheduler.Start(() => + from x in xs + from y in Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) + select x * 10 + (int)y + ); + + res.Messages.AssertEqual( + OnNext(221, 40), + OnNext(222, 30), + OnNext(222, 41), + OnNext(223, 20), + OnNext(223, 31), + OnNext(223, 42), + OnNext(224, 50), + OnNext(224, 21), + OnNext(224, 32), + OnNext(224, 43), + OnNext(225, 51), + OnNext(226, 52), + OnNext(227, 53), + OnNext(228, 54), + OnCompleted(228) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 224) + ); + } + + [TestMethod] + public void SelectMany_QueryOperator_CompleteInnerFirst() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(300) + ); + + var res = scheduler.Start(() => + from x in xs + from y in Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) + select x * 10 + (int)y + ); + + res.Messages.AssertEqual( + OnNext(221, 40), + OnNext(222, 30), + OnNext(222, 41), + OnNext(223, 20), + OnNext(223, 31), + OnNext(223, 42), + OnNext(224, 50), + OnNext(224, 21), + OnNext(224, 32), + OnNext(224, 43), + OnNext(225, 51), + OnNext(226, 52), + OnNext(227, 53), + OnNext(228, 54), + OnCompleted(300) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 300) + ); + } + + [TestMethod] + public void SelectMany_QueryOperator_ErrorOuter() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnError(224, ex) + ); + + var res = scheduler.Start(() => + from x in xs + from y in Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) + select x * 10 + (int)y + ); + + res.Messages.AssertEqual( + OnNext(221, 40), + OnNext(222, 30), + OnNext(222, 41), + OnNext(223, 20), + OnNext(223, 31), + OnNext(223, 42), + OnError(224, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 224) + ); + } + + [TestMethod] + public void SelectMany_QueryOperator_ErrorInner() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(224) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + from x in xs + from y in x == 2 ? Observable.Throw(ex, scheduler) + : Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) + select x * 10 + (int)y + ); + + res.Messages.AssertEqual( + OnNext(221, 40), + OnNext(222, 30), + OnNext(222, 41), + OnError(223, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 223) + ); + } + + [TestMethod] + public void SelectMany_QueryOperator_Dispose() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(224) + ); + + var res = scheduler.Start(() => + from x in xs + from y in Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) + select x * 10 + (int)y, + 223 + ); + + res.Messages.AssertEqual( + OnNext(221, 40), + OnNext(222, 30), + OnNext(222, 41) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 223) + ); + } + + static T Throw(Exception ex) + { + throw ex; + } + + + [TestMethod] + public void SelectMany_QueryOperator_ThrowSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(224) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + from x in xs + from y in Throw>(ex) + select x * 10 + (int)y + ); + + res.Messages.AssertEqual( + OnError(220, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 220) + ); + } + + [TestMethod] + public void SelectMany_QueryOperator_ThrowResult() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(224) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + from x in xs + from y in Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x) + select Throw(ex) + ); + + res.Messages.AssertEqual( + OnError(221, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 221) + ); + } + + [TestMethod] + public void SelectManyWithIndex_QueryOperator_ArgumentChecking() + { + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, ((Func)null))); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, DummyFunc.Instance).Subscribe(null)); + } + + [TestMethod] + public void SelectManyWithIndex_QueryOperator_Index() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(210, 4), + OnNext(220, 3), + OnNext(250, 5), + OnNext(270, 1), + OnCompleted(290) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, i) => Observable.Range(10, i + 1), (x, i, y, j) => new { x, i, y, j }) + ); + + var witness = new { x = 0, i = 0, y = 0, j = 0 }; + + res.Messages.AssertEqual( + OnNext(210, new { x = 4, i = 0, y = 10, j = 0 }), + OnNext(220, new { x = 3, i = 1, y = 10, j = 0 }), + OnNext(220, new { x = 3, i = 1, y = 11, j = 1 }), + OnNext(250, new { x = 5, i = 2, y = 10, j = 0 }), + OnNext(250, new { x = 5, i = 2, y = 11, j = 1 }), + OnNext(250, new { x = 5, i = 2, y = 12, j = 2 }), + OnNext(270, new { x = 1, i = 3, y = 10, j = 0 }), + OnNext(270, new { x = 1, i = 3, y = 11, j = 1 }), + OnNext(270, new { x = 1, i = 3, y = 12, j = 2 }), + OnNext(270, new { x = 1, i = 3, y = 13, j = 3 }), + OnCompleted(290, witness) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 290) + ); + } + + [TestMethod] + public void SelectManyWithIndex_QueryOperator_CompleteOuterFirst() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(224) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x), (x, _, y, __) => x * 10 + (int)y) + ); + + res.Messages.AssertEqual( + OnNext(221, 40), + OnNext(222, 30), + OnNext(222, 41), + OnNext(223, 20), + OnNext(223, 31), + OnNext(223, 42), + OnNext(224, 50), + OnNext(224, 21), + OnNext(224, 32), + OnNext(224, 43), + OnNext(225, 51), + OnNext(226, 52), + OnNext(227, 53), + OnNext(228, 54), + OnCompleted(228) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 224) + ); + } + + [TestMethod] + public void SelectManyWithIndex_QueryOperator_CompleteInnerFirst() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(300) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x), (x, _, y, __) => x * 10 + (int)y) + ); + + res.Messages.AssertEqual( + OnNext(221, 40), + OnNext(222, 30), + OnNext(222, 41), + OnNext(223, 20), + OnNext(223, 31), + OnNext(223, 42), + OnNext(224, 50), + OnNext(224, 21), + OnNext(224, 32), + OnNext(224, 43), + OnNext(225, 51), + OnNext(226, 52), + OnNext(227, 53), + OnNext(228, 54), + OnCompleted(300) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 300) + ); + } + + [TestMethod] + public void SelectManyWithIndex_QueryOperator_ErrorOuter() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnError(224, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x), (x, _, y, __) => x * 10 + (int)y) + ); + + res.Messages.AssertEqual( + OnNext(221, 40), + OnNext(222, 30), + OnNext(222, 41), + OnNext(223, 20), + OnNext(223, 31), + OnNext(223, 42), + OnError(224, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 224) + ); + } + + [TestMethod] + public void SelectManyWithIndex_QueryOperator_ErrorInner() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(224) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => x == 2 + ? Observable.Throw(ex, scheduler) + : Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x), + (x, _, y, __) => x * 10 + (int)y) + ); + + res.Messages.AssertEqual( + OnNext(221, 40), + OnNext(222, 30), + OnNext(222, 41), + OnError(223, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 223) + ); + } + + [TestMethod] + public void SelectManyWithIndex_QueryOperator_Dispose() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(224) + ); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x), (x, _, y, __) => x * 10 + (int)y), + 223 + ); + + res.Messages.AssertEqual( + OnNext(221, 40), + OnNext(222, 30), + OnNext(222, 41) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 223) + ); + } + + [TestMethod] + public void SelectManyWithIndex_QueryOperator_ThrowSelector() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(224) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Throw>(ex), (x, _, y, __) => x * 10 + (int)y) + ); + + res.Messages.AssertEqual( + OnError(220, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 220) + ); + } + + [TestMethod] + public void SelectManyWithIndex_QueryOperator_ThrowResult() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(220, 4), + OnNext(221, 3), + OnNext(222, 2), + OnNext(223, 5), + OnCompleted(224) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany((x, _) => Observable.Interval(TimeSpan.FromTicks(1), scheduler).Take(x), (x, _, y, __) => Throw(ex)) + ); + + res.Messages.AssertEqual( + OnError(221, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 221) + ); + } + + + [TestMethod] + public void SelectMany_Triple_ArgumentChecking() + { + ReactiveAssert.Throws(() => Observable.SelectMany(null, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc>.Instance)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, (Func>)null, DummyFunc>.Instance, DummyFunc>.Instance)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, DummyFunc>.Instance, null, DummyFunc>.Instance)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, null)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc>.Instance).Subscribe(null)); + } + + [TestMethod] + public void SelectMany_Triple_Identity() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Return(x, scheduler), + ex => Observable.Throw(ex, scheduler), + () => Observable.Empty(scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, 0), + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(305, 4), + OnCompleted(306) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectMany_Triple_InnersWithTiming1() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var ysn = scheduler.CreateColdObservable( + OnNext(10, 10), + OnNext(20, 11), + OnNext(30, 12), + OnCompleted(40) + ); + + var yse = scheduler.CreateColdObservable( + OnNext(0, 99), + OnCompleted(10) + ); + + var ysc = scheduler.CreateColdObservable( + OnNext(10, 42), + OnCompleted(20) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => ysn, + ex => yse, + () => ysc + ) + ); + + res.Messages.AssertEqual( + OnNext(310, 10), + OnNext(311, 10), + OnNext(312, 10), + OnNext(313, 10), + OnNext(314, 10), + OnNext(315, 42), + OnNext(320, 11), + OnNext(321, 11), + OnNext(322, 11), + OnNext(323, 11), + OnNext(324, 11), + OnNext(330, 12), + OnNext(331, 12), + OnNext(332, 12), + OnNext(333, 12), + OnNext(334, 12), + OnCompleted(344) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + + ysn.Subscriptions.AssertEqual( + Subscribe(300, 340), + Subscribe(301, 341), + Subscribe(302, 342), + Subscribe(303, 343), + Subscribe(304, 344) + ); + + yse.Subscriptions.AssertEqual( + ); + + ysc.Subscriptions.AssertEqual( + Subscribe(305, 325) + ); + } + + [TestMethod] + public void SelectMany_Triple_InnersWithTiming2() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var ysn = scheduler.CreateColdObservable( + OnNext(10, 10), + OnNext(20, 11), + OnNext(30, 12), + OnCompleted(40) + ); + + var yse = scheduler.CreateColdObservable( + OnNext(0, 99), + OnCompleted(10) + ); + + var ysc = scheduler.CreateColdObservable( + OnNext(10, 42), + OnCompleted(50) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => ysn, + ex => yse, + () => ysc + ) + ); + + res.Messages.AssertEqual( + OnNext(310, 10), + OnNext(311, 10), + OnNext(312, 10), + OnNext(313, 10), + OnNext(314, 10), + OnNext(315, 42), + OnNext(320, 11), + OnNext(321, 11), + OnNext(322, 11), + OnNext(323, 11), + OnNext(324, 11), + OnNext(330, 12), + OnNext(331, 12), + OnNext(332, 12), + OnNext(333, 12), + OnNext(334, 12), + OnCompleted(355) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + + ysn.Subscriptions.AssertEqual( + Subscribe(300, 340), + Subscribe(301, 341), + Subscribe(302, 342), + Subscribe(303, 343), + Subscribe(304, 344) + ); + + yse.Subscriptions.AssertEqual( + ); + + ysc.Subscriptions.AssertEqual( + Subscribe(305, 355) + ); + } + + [TestMethod] + public void SelectMany_Triple_InnersWithTiming3() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(400, 1), + OnNext(500, 2), + OnNext(600, 3), + OnNext(700, 4), + OnCompleted(800) + ); + + var ysn = scheduler.CreateColdObservable( + OnNext(10, 10), + OnNext(20, 11), + OnNext(30, 12), + OnCompleted(40) + ); + + var yse = scheduler.CreateColdObservable( + OnNext(0, 99), + OnCompleted(10) + ); + + var ysc = scheduler.CreateColdObservable( + OnNext(10, 42), + OnCompleted(100) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => ysn, + ex => yse, + () => ysc + ) + ); + + res.Messages.AssertEqual( + OnNext(310, 10), + OnNext(320, 11), + OnNext(330, 12), + OnNext(410, 10), + OnNext(420, 11), + OnNext(430, 12), + OnNext(510, 10), + OnNext(520, 11), + OnNext(530, 12), + OnNext(610, 10), + OnNext(620, 11), + OnNext(630, 12), + OnNext(710, 10), + OnNext(720, 11), + OnNext(730, 12), + OnNext(810, 42), + OnCompleted(900) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 800) + ); + + ysn.Subscriptions.AssertEqual( + Subscribe(300, 340), + Subscribe(400, 440), + Subscribe(500, 540), + Subscribe(600, 640), + Subscribe(700, 740) + ); + + yse.Subscriptions.AssertEqual( + ); + + ysc.Subscriptions.AssertEqual( + Subscribe(800, 900) + ); + } + + [TestMethod] + public void SelectMany_Triple_Error_Identity() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnError(305, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Return(x, scheduler), + ex1 => Observable.Throw(ex1, scheduler), + () => Observable.Empty(scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, 0), + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(305, 4), + OnError(306, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectMany_Triple_SelectMany() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Repeat(x, x, scheduler), + ex => Observable.Throw(ex, scheduler), + () => Observable.Empty(scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnNext(305, 4), + OnNext(305, 3), + OnNext(306, 4), + OnNext(306, 3), + OnNext(307, 4), + OnNext(308, 4), + OnCompleted(308) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + + [TestMethod] + public void SelectMany_Triple_Concat() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Return(x, scheduler), + ex => Observable.Throw(ex, scheduler), + () => Observable.Range(1, 3, scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, 0), + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(305, 4), + OnNext(306, 1), + OnNext(307, 2), + OnNext(308, 3), + OnCompleted(309) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectMany_Triple_Catch() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Return(x, scheduler), + ex => Observable.Range(1, 3, scheduler), + () => Observable.Empty(scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, 0), + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(305, 4), + OnCompleted(306) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectMany_Triple_Error_Catch() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnError(305, new Exception()) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Return(x, scheduler), + ex => Observable.Range(1, 3, scheduler), + () => Observable.Empty(scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, 0), + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(305, 4), + OnNext(306, 1), + OnNext(307, 2), + OnNext(308, 3), + OnCompleted(309) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectMany_Triple_All() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Repeat(x, x, scheduler), + ex => Observable.Repeat(0, 2, scheduler), + () => Observable.Repeat(-1, 2, scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnNext(305, 4), + OnNext(305, 3), + OnNext(306, -1), + OnNext(306, 4), + OnNext(306, 3), + OnNext(307, -1), + OnNext(307, 4), + OnNext(308, 4), + OnCompleted(308) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectMany_Triple_Error_All() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnError(305, new Exception()) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Repeat(x, x, scheduler), + ex => Observable.Repeat(0, 2, scheduler), + () => Observable.Repeat(-1, 2, scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnNext(305, 4), + OnNext(305, 3), + OnNext(306, 0), + OnNext(306, 4), + OnNext(306, 3), + OnNext(307, 0), + OnNext(307, 4), + OnNext(308, 4), + OnCompleted(308) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectMany_Triple_All_Dispose() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Repeat(x, x, scheduler), + ex => Observable.Repeat(0, 2, scheduler), + () => Observable.Repeat(-1, 2, scheduler) + ), + 307 + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnNext(305, 4), + OnNext(305, 3), + OnNext(306, -1), + OnNext(306, 4), + OnNext(306, 3) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectMany_Triple_All_Dispose_Before_First() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Repeat(x, x, scheduler), + ex => Observable.Repeat(0, 2, scheduler), + () => Observable.Repeat(-1, 2, scheduler) + ), + 304 + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 304) + ); + } + + [TestMethod] + public void SelectMany_Triple_OnNextThrow() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Throw>(ex), + ex1 => Observable.Repeat(0, 2, scheduler), + () => Observable.Repeat(-1, 2, scheduler) + ) + ); + + res.Messages.AssertEqual( + OnError(300, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 300) + ); + } + + [TestMethod] + public void SelectMany_Triple_OnErrorThrow() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnError(305, new Exception()) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Repeat(x, x, scheduler), + ex1 => Throw>(ex), + () => Observable.Repeat(-1, 2, scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnError(305, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectMany_Triple_OnCompletedThrow() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany( + x => Observable.Repeat(x, x, scheduler), + ex1 => Observable.Repeat(0, 2, scheduler), + () => Throw>(ex) + ) + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnError(305, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_ArgumentChecking() + { + ReactiveAssert.Throws(() => Observable.SelectMany(null, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc>.Instance)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, (Func>)null, DummyFunc>.Instance, DummyFunc>.Instance)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, DummyFunc>.Instance, null, DummyFunc>.Instance)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, null)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, DummyFunc>.Instance, DummyFunc>.Instance, DummyFunc>.Instance).Subscribe(null)); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_Index() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var witness = new { x = 0, i = 0 }; + + var res = scheduler.Start(() => + xs.SelectMany( + (x, i) => Observable.Return(new { x, i }, scheduler), + ex => Observable.Throw(ex, scheduler, witness), + () => Observable.Empty(scheduler, witness) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, new { x = 0, i = 0 }), + OnNext(302, new { x = 1, i = 1 }), + OnNext(303, new { x = 2, i = 2 }), + OnNext(304, new { x = 3, i = 3 }), + OnNext(305, new { x = 4, i = 4 }), + OnCompleted(306, witness) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_Identity() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Return(x, scheduler), + ex => Observable.Throw(ex, scheduler), + () => Observable.Empty(scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, 0), + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(305, 4), + OnCompleted(306) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_InnersWithTiming1() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var ysn = scheduler.CreateColdObservable( + OnNext(10, 10), + OnNext(20, 11), + OnNext(30, 12), + OnCompleted(40) + ); + + var yse = scheduler.CreateColdObservable( + OnNext(0, 99), + OnCompleted(10) + ); + + var ysc = scheduler.CreateColdObservable( + OnNext(10, 42), + OnCompleted(20) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => ysn, + ex => yse, + () => ysc + ) + ); + + res.Messages.AssertEqual( + OnNext(310, 10), + OnNext(311, 10), + OnNext(312, 10), + OnNext(313, 10), + OnNext(314, 10), + OnNext(315, 42), + OnNext(320, 11), + OnNext(321, 11), + OnNext(322, 11), + OnNext(323, 11), + OnNext(324, 11), + OnNext(330, 12), + OnNext(331, 12), + OnNext(332, 12), + OnNext(333, 12), + OnNext(334, 12), + OnCompleted(344) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + + ysn.Subscriptions.AssertEqual( + Subscribe(300, 340), + Subscribe(301, 341), + Subscribe(302, 342), + Subscribe(303, 343), + Subscribe(304, 344) + ); + + yse.Subscriptions.AssertEqual( + ); + + ysc.Subscriptions.AssertEqual( + Subscribe(305, 325) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_InnersWithTiming2() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var ysn = scheduler.CreateColdObservable( + OnNext(10, 10), + OnNext(20, 11), + OnNext(30, 12), + OnCompleted(40) + ); + + var yse = scheduler.CreateColdObservable( + OnNext(0, 99), + OnCompleted(10) + ); + + var ysc = scheduler.CreateColdObservable( + OnNext(10, 42), + OnCompleted(50) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => ysn, + ex => yse, + () => ysc + ) + ); + + res.Messages.AssertEqual( + OnNext(310, 10), + OnNext(311, 10), + OnNext(312, 10), + OnNext(313, 10), + OnNext(314, 10), + OnNext(315, 42), + OnNext(320, 11), + OnNext(321, 11), + OnNext(322, 11), + OnNext(323, 11), + OnNext(324, 11), + OnNext(330, 12), + OnNext(331, 12), + OnNext(332, 12), + OnNext(333, 12), + OnNext(334, 12), + OnCompleted(355) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + + ysn.Subscriptions.AssertEqual( + Subscribe(300, 340), + Subscribe(301, 341), + Subscribe(302, 342), + Subscribe(303, 343), + Subscribe(304, 344) + ); + + yse.Subscriptions.AssertEqual( + ); + + ysc.Subscriptions.AssertEqual( + Subscribe(305, 355) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_InnersWithTiming3() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(400, 1), + OnNext(500, 2), + OnNext(600, 3), + OnNext(700, 4), + OnCompleted(800) + ); + + var ysn = scheduler.CreateColdObservable( + OnNext(10, 10), + OnNext(20, 11), + OnNext(30, 12), + OnCompleted(40) + ); + + var yse = scheduler.CreateColdObservable( + OnNext(0, 99), + OnCompleted(10) + ); + + var ysc = scheduler.CreateColdObservable( + OnNext(10, 42), + OnCompleted(100) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => ysn, + ex => yse, + () => ysc + ) + ); + + res.Messages.AssertEqual( + OnNext(310, 10), + OnNext(320, 11), + OnNext(330, 12), + OnNext(410, 10), + OnNext(420, 11), + OnNext(430, 12), + OnNext(510, 10), + OnNext(520, 11), + OnNext(530, 12), + OnNext(610, 10), + OnNext(620, 11), + OnNext(630, 12), + OnNext(710, 10), + OnNext(720, 11), + OnNext(730, 12), + OnNext(810, 42), + OnCompleted(900) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 800) + ); + + ysn.Subscriptions.AssertEqual( + Subscribe(300, 340), + Subscribe(400, 440), + Subscribe(500, 540), + Subscribe(600, 640), + Subscribe(700, 740) + ); + + yse.Subscriptions.AssertEqual( + ); + + ysc.Subscriptions.AssertEqual( + Subscribe(800, 900) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_Error_Identity() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnError(305, ex) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Return(x, scheduler), + ex1 => Observable.Throw(ex1, scheduler), + () => Observable.Empty(scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, 0), + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(305, 4), + OnError(306, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_SelectMany() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Repeat(x, x, scheduler), + ex => Observable.Throw(ex, scheduler), + () => Observable.Empty(scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnNext(305, 4), + OnNext(305, 3), + OnNext(306, 4), + OnNext(306, 3), + OnNext(307, 4), + OnNext(308, 4), + OnCompleted(308) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + + [TestMethod] + public void SelectManyWithIndex_Triple_Concat() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Return(x, scheduler), + ex => Observable.Throw(ex, scheduler), + () => Observable.Range(1, 3, scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, 0), + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(305, 4), + OnNext(306, 1), + OnNext(307, 2), + OnNext(308, 3), + OnCompleted(309) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_Catch() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Return(x, scheduler), + ex => Observable.Range(1, 3, scheduler), + () => Observable.Empty(scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, 0), + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(305, 4), + OnCompleted(306) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_Error_Catch() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnError(305, new Exception()) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Return(x, scheduler), + ex => Observable.Range(1, 3, scheduler), + () => Observable.Empty(scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(301, 0), + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(305, 4), + OnNext(306, 1), + OnNext(307, 2), + OnNext(308, 3), + OnCompleted(309) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_All() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Repeat(x, x, scheduler), + ex => Observable.Repeat(0, 2, scheduler), + () => Observable.Repeat(-1, 2, scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnNext(305, 4), + OnNext(305, 3), + OnNext(306, -1), + OnNext(306, 4), + OnNext(306, 3), + OnNext(307, -1), + OnNext(307, 4), + OnNext(308, 4), + OnCompleted(308) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_Error_All() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnError(305, new Exception()) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Repeat(x, x, scheduler), + ex => Observable.Repeat(0, 2, scheduler), + () => Observable.Repeat(-1, 2, scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnNext(305, 4), + OnNext(305, 3), + OnNext(306, 0), + OnNext(306, 4), + OnNext(306, 3), + OnNext(307, 0), + OnNext(307, 4), + OnNext(308, 4), + OnCompleted(308) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_All_Dispose() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Repeat(x, x, scheduler), + ex => Observable.Repeat(0, 2, scheduler), + () => Observable.Repeat(-1, 2, scheduler) + ), + 307 + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnNext(305, 4), + OnNext(305, 3), + OnNext(306, -1), + OnNext(306, 4), + OnNext(306, 3) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_All_Dispose_Before_First() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Repeat(x, x, scheduler), + ex => Observable.Repeat(0, 2, scheduler), + () => Observable.Repeat(-1, 2, scheduler) + ), + 304 + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 304) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_OnNextThrow() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Throw>(ex), + ex1 => Observable.Repeat(0, 2, scheduler), + () => Observable.Repeat(-1, 2, scheduler) + ) + ); + + res.Messages.AssertEqual( + OnError(300, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 300) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_OnErrorThrow() + { + var scheduler = new TestScheduler(); + + var ex = new Exception(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnError(305, new Exception()) + ); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Repeat(x, x, scheduler), + ex1 => Throw>(ex), + () => Observable.Repeat(-1, 2, scheduler) + ) + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnError(305, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + + [TestMethod] + public void SelectManyWithIndex_Triple_OnCompletedThrow() + { + var scheduler = new TestScheduler(); + + var xs = scheduler.CreateHotObservable( + OnNext(300, 0), + OnNext(301, 1), + OnNext(302, 2), + OnNext(303, 3), + OnNext(304, 4), + OnCompleted(305) + ); + + var ex = new Exception(); + + var res = scheduler.Start(() => + xs.SelectMany( + (x, _) => Observable.Repeat(x, x, scheduler), + ex1 => Observable.Repeat(0, 2, scheduler), + () => Throw>(ex) + ) + ); + + res.Messages.AssertEqual( + OnNext(302, 1), + OnNext(303, 2), + OnNext(304, 3), + OnNext(304, 2), + OnError(305, ex) + ); + + xs.Subscriptions.AssertEqual( + Subscribe(200, 305) + ); + } + +#if !NO_TPL + + [TestMethod] + public void SelectMany_Task_ArgumentChecking() + { + var t = new Task(() => 42); + + ReactiveAssert.Throws(() => Observable.SelectMany(default(IObservable), x => t)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, default(Func>))); + + ReactiveAssert.Throws(() => Observable.SelectMany(default(IObservable), (int x, CancellationToken ct) => t)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, default(Func>))); + + ReactiveAssert.Throws(() => Observable.SelectMany(default(IObservable), x => t, (x, y) => x)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, default(Func>), (x, y) => x)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, x => t, default(Func))); + + ReactiveAssert.Throws(() => Observable.SelectMany(default(IObservable), (x, ct) => t, (x, y) => x)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, default(Func>), (x, y) => x)); + ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, (x, ct) => t, default(Func))); + } + + [TestMethod] + public void SelectMany_Task1() + { + var res = Observable.Range(0, 10).SelectMany(x => Task.Factory.StartNew(() => x + 1)).ToEnumerable(); + Assert.IsTrue(Enumerable.Range(0, 10).SelectMany(x => new[] { x + 1 }).SequenceEqual(res.OrderBy(x => x))); + } + + [TestMethod] + public void SelectMany_Task2() + { + var res = Observable.Range(0, 10).SelectMany((x, ct) => Task.Factory.StartNew(() => x + 1, ct)).ToEnumerable(); + Assert.IsTrue(Enumerable.Range(0, 10).SelectMany(x => new[] { x + 1 }).SequenceEqual(res.OrderBy(x => x))); + } + + [TestMethod] + public void SelectMany_Task_TaskThrows() + { + var ex = new Exception(); + + var res = Observable.Range(0, 10).SelectMany(x => Task.Factory.StartNew(() => + { + if (x > 5) + throw ex; + return x + 1; + })).ToEnumerable(); + + ReactiveAssert.Throws(ex, () => + { + foreach (var x in res) + ; + }); + } + + [TestMethod] + public void SelectMany_Task_SelectorThrows() + { + var ex = new Exception(); + + var res = Observable.Range(0, 10).SelectMany(x => + { + if (x > 5) + throw ex; + return Task.Factory.StartNew(() => x + 1); + }).ToEnumerable(); + + ReactiveAssert.Throws(ex, () => + { + foreach (var x in res) + ; + }); + } + + [TestMethod] + public void SelectMany_Task_ResultSelector1() + { + var res = Observable.Range(0, 10).SelectMany(x => Task.Factory.StartNew(() => x + 1), (x, y) => x + y).ToEnumerable(); + Assert.IsTrue(Enumerable.Range(0, 10).SelectMany(x => new[] { 2 * x + 1 }).SequenceEqual(res.OrderBy(x => x))); + } + + [TestMethod] + public void SelectMany_Task_ResultSelector2() + { + var res = Observable.Range(0, 10).SelectMany((x, ct) => Task.Factory.StartNew(() => x + 1, ct), (x, y) => x + y).ToEnumerable(); + Assert.IsTrue(Enumerable.Range(0, 10).SelectMany(x => new[] { 2 * x + 1 }).SequenceEqual(res.OrderBy(x => x))); + } + + [TestMethod] + public void SelectMany_Task_ResultSelectorThrows() + { + var ex = new Exception(); + + var res = Observable.Range(0, 10).SelectMany(x => Task.Factory.StartNew(() => x + 1), (x, y) => + { + if (x > 5) + throw ex; + return x + y; + }).ToEnumerable(); + + ReactiveAssert.Throws(ex, () => + { + foreach (var x in res) + ; + }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_RanToCompletion_Async() + { + var tcss = new TaskCompletionSource[2]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + + var res = Observable.SelectMany(Observable.Range(0, 2), x => tcss[x].Task); + + var lst = new List(); + + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, () => done.Set()); + + tcss[0].SetResult(42); + tcss[1].SetResult(43); + + done.WaitOne(); + + lst.OrderBy(x => x).AssertEqual(new[] { 42, 43 }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_RanToCompletion_Sync() + { + var tcss = new TaskCompletionSource[2]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + + tcss[0].SetResult(42); + tcss[1].SetResult(43); + + var res = Observable.SelectMany(Observable.Range(0, 2), x => tcss[x].Task); + + var lst = new List(); + + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, () => done.Set()); + + done.WaitOne(); + + lst.OrderBy(x => x).AssertEqual(new[] { 42, 43 }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_Faulted_Async() + { + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task); + + var lst = new List(); + + var err = default(Exception); + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, ex_ => { err = ex_; done.Set(); }, () => done.Set()); + + var ex = new Exception(); + tcss[1].SetException(ex); + + done.WaitOne(); + + lst.AssertEqual(new int[0]); + Assert.AreSame(ex, err); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_Faulted_Sync() + { + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var ex = new Exception(); + tcss[1].SetException(ex); + + var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task); + + var lst = new List(); + + var err = default(Exception); + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, ex_ => { err = ex_; done.Set(); }, () => done.Set()); + + done.WaitOne(); + + lst.AssertEqual(new int[0]); + Assert.AreSame(ex, err); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_Canceled_Async() + { + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task); + + var lst = new List(); + + var err = default(Exception); + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, ex_ => { err = ex_; done.Set(); }, () => done.Set()); + + tcss[1].SetCanceled(); + + done.WaitOne(); + + lst.AssertEqual(new int[0]); + Assert.IsTrue(err is TaskCanceledException && ((TaskCanceledException)err).Task == tcss[1].Task); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_Canceled_Sync() + { + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + tcss[1].SetCanceled(); + + var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task); + + var lst = new List(); + + var err = default(Exception); + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, ex_ => { err = ex_; done.Set(); }, () => done.Set()); + + done.WaitOne(); + + lst.AssertEqual(new int[0]); + Assert.IsTrue(err is TaskCanceledException && ((TaskCanceledException)err).Task == tcss[1].Task); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_InnerCompleteBeforeOuter() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var res = Observable.SelectMany(xs, x => tcss[x].Task); + + var lst = new List(); + + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, () => done.Set()); + + tcss[1].SetResult(42); + + xs.OnNext(0); + xs.OnNext(1); + xs.OnNext(2); + + tcss[0].SetResult(43); + tcss[2].SetResult(44); + + xs.OnCompleted(); + + done.WaitOne(); + + lst.OrderBy(x => x).AssertEqual(new[] { 42, 43, 44 }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_OuterCompleteBeforeInner() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var res = Observable.SelectMany(xs, x => tcss[x].Task); + + var lst = new List(); + + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, () => done.Set()); + + tcss[1].SetResult(42); + + xs.OnNext(0); + xs.OnNext(1); + xs.OnNext(2); + xs.OnCompleted(); + + tcss[0].SetResult(43); + tcss[2].SetResult(44); + + done.WaitOne(); + + lst.OrderBy(x => x).AssertEqual(new[] { 42, 43, 44 }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_Cancellation_NeverInvoked() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var res = Observable.SelectMany(xs, (x, token) => + { + var tcs = tcss[x]; + + token.Register(() => tcs.SetCanceled()); + + return tcs.Task; + }); + + var lst = new List(); + + var done = new ManualResetEvent(false); + var d = res.Subscribe(lst.Add, () => done.Set()); + + tcss[1].SetResult(42); + + xs.OnNext(0); + xs.OnNext(1); + xs.OnNext(2); + xs.OnCompleted(); + + tcss[0].SetResult(43); + tcss[2].SetResult(44); + + done.WaitOne(); + + lst.OrderBy(x => x).AssertEqual(new[] { 42, 43, 44 }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_Cancellation_Invoked() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var n = 0; + var m = 0; + + var res = Observable.SelectMany(xs, (x, token) => + { + var tcs = tcss[x]; + + token.Register(() => { n++; m += tcs.TrySetCanceled() ? 1 : 0; }); + + return tcs.Task; + }); + + var lst = new List(); + + var done = false; + var d = res.Subscribe(lst.Add, () => done = true); + + tcss[1].SetResult(42); + + xs.OnNext(0); + xs.OnNext(1); + + d.Dispose(); + + xs.OnNext(2); + xs.OnCompleted(); + + Assert.IsFalse(tcss[0].TrySetResult(43)); + tcss[2].SetResult(44); // never observed because xs.OnNext(2) happened after dispose + + lst.AssertEqual(new[] { 42 }); + Assert.IsFalse(done); + Assert.AreEqual(2, n); + Assert.AreEqual(1, m); // tcss[1] was already finished + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_Cancellation_AfterOuterError() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var n = 0; + var m = 0; + + var res = Observable.SelectMany(xs, (x, token) => + { + var tcs = tcss[x]; + + token.Register(() => { n++; m += tcs.TrySetCanceled() ? 1 : 0; }); + + return tcs.Task; + }); + + var lst = new List(); + + var done = false; + var err = default(Exception); + res.Subscribe(lst.Add, ex_ => err = ex_, () => done = true); + + tcss[1].SetResult(42); + + xs.OnNext(0); + xs.OnNext(1); + + var ex = new Exception(); + xs.OnError(ex); + + Assert.IsFalse(tcss[0].TrySetResult(43)); + tcss[2].SetResult(44); // no-op + + lst.AssertEqual(new[] { 42 }); + Assert.AreSame(ex, err); + Assert.IsFalse(done); + Assert.AreEqual(2, n); + Assert.AreEqual(1, m); // tcss[1] was already finished + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_Simple_Cancellation_AfterSelectorThrows() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[4]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + tcss[3] = new TaskCompletionSource(); + + var n = 0; + var m = 0; + + var ex = new Exception(); + + var res = Observable.SelectMany(xs, (x, token) => + { + if (x == 2) + throw ex; + + var tcs = tcss[x]; + + token.Register(() => { n++; m += tcs.TrySetCanceled() ? 1 : 0; }); + + return tcs.Task; + }); + + var lst = new List(); + + var done = false; + var evt = new ManualResetEvent(false); + var err = default(Exception); + res.Subscribe(lst.Add, ex_ => { err = ex_; evt.Set(); }, () => { done = true; evt.Set(); }); + + tcss[1].SetResult(43); + + xs.OnNext(0); + xs.OnNext(1); + + tcss[0].SetResult(42); + + xs.OnNext(2); // causes error + xs.OnCompleted(); + + evt.WaitOne(); + + Assert.IsFalse(done); + Assert.AreSame(ex, err); + Assert.AreEqual(2, n); + Assert.AreEqual(0, m); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_RanToCompletion_Async() + { + var tcss = new TaskCompletionSource[2]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + + var res = Observable.SelectMany(Observable.Range(0, 2), x => tcss[x].Task, (x, y) => x + y); + + var lst = new List(); + + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, () => done.Set()); + + tcss[0].SetResult(42); + tcss[1].SetResult(43); + + done.WaitOne(); + + lst.OrderBy(x => x).AssertEqual(new[] { 42 + 0, 43 + 1 }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_RanToCompletion_Sync() + { + var tcss = new TaskCompletionSource[2]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + + tcss[0].SetResult(42); + tcss[1].SetResult(43); + + var res = Observable.SelectMany(Observable.Range(0, 2), x => tcss[x].Task, (x, y) => x + y); + + var lst = new List(); + + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, () => done.Set()); + + done.WaitOne(); + + lst.OrderBy(x => x).AssertEqual(new[] { 42 + 0, 43 + 1 }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_Faulted_Async() + { + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task, (x, y) => x + y); + + var lst = new List(); + + var err = default(Exception); + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, ex_ => { err = ex_; done.Set(); }, () => done.Set()); + + var ex = new Exception(); + tcss[1].SetException(ex); + + done.WaitOne(); + + lst.AssertEqual(new int[0]); + Assert.AreSame(ex, err); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_Faulted_Sync() + { + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var ex = new Exception(); + tcss[1].SetException(ex); + + var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task, (x, y) => x + y); + + var lst = new List(); + + var err = default(Exception); + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, ex_ => { err = ex_; done.Set(); }, () => done.Set()); + + done.WaitOne(); + + lst.AssertEqual(new int[0]); + Assert.AreSame(ex, err); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_Canceled_Async() + { + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task, (x, y) => x + y); + + var lst = new List(); + + var err = default(Exception); + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, ex_ => { err = ex_; done.Set(); }, () => done.Set()); + + tcss[1].SetCanceled(); + + done.WaitOne(); + + lst.AssertEqual(new int[0]); + Assert.IsTrue(err is TaskCanceledException && ((TaskCanceledException)err).Task == tcss[1].Task); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_Canceled_Sync() + { + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + tcss[1].SetCanceled(); + + var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task, (x, y) => x + y); + + var lst = new List(); + + var err = default(Exception); + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, ex_ => { err = ex_; done.Set(); }, () => done.Set()); + + done.WaitOne(); + + lst.AssertEqual(new int[0]); + Assert.IsTrue(err is TaskCanceledException && ((TaskCanceledException)err).Task == tcss[1].Task); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_InnerCompleteBeforeOuter() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var res = Observable.SelectMany(xs, x => tcss[x].Task, (x, y) => x + y); + + var lst = new List(); + + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, () => done.Set()); + + tcss[1].SetResult(42); + + xs.OnNext(0); + xs.OnNext(1); + xs.OnNext(2); + + tcss[0].SetResult(43); + tcss[2].SetResult(44); + + xs.OnCompleted(); + + done.WaitOne(); + + lst.OrderBy(x => x).AssertEqual(new[] { 42 + 1, 43 + 0, 44 + 2 }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_OuterCompleteBeforeInner() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var res = Observable.SelectMany(xs, x => tcss[x].Task, (x, y) => x + y); + + var lst = new List(); + + var done = new ManualResetEvent(false); + res.Subscribe(lst.Add, () => done.Set()); + + tcss[1].SetResult(42); + + xs.OnNext(0); + xs.OnNext(1); + xs.OnNext(2); + xs.OnCompleted(); + + tcss[0].SetResult(43); + tcss[2].SetResult(44); + + done.WaitOne(); + + lst.OrderBy(x => x).AssertEqual(new[] { 42 + 1, 43 + 0, 44 + 2 }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_Cancellation_NeverInvoked() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var res = Observable.SelectMany(xs, (x, token) => + { + var tcs = tcss[x]; + + token.Register(() => tcs.SetCanceled()); + + return tcs.Task; + }, (x, y) => x + y); + + var lst = new List(); + + var done = new ManualResetEvent(false); + var d = res.Subscribe(lst.Add, () => done.Set()); + + tcss[1].SetResult(42); + + xs.OnNext(0); + xs.OnNext(1); + xs.OnNext(2); + xs.OnCompleted(); + + tcss[0].SetResult(43); + tcss[2].SetResult(44); + + done.WaitOne(); + + lst.OrderBy(x => x).AssertEqual(new[] { 42 + 1, 43 + 0, 44 + 2 }); + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_Cancellation_Invoked() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var n = 0; + var m = 0; + + var res = Observable.SelectMany(xs, (x, token) => + { + var tcs = tcss[x]; + + token.Register(() => { n++; m += tcs.TrySetCanceled() ? 1 : 0; }); + + return tcs.Task; + }, (x, y) => x + y); + + var lst = new List(); + + var done = false; + var d = res.Subscribe(lst.Add, () => done = true); + + tcss[1].SetResult(42); + + xs.OnNext(0); + xs.OnNext(1); + + d.Dispose(); + + xs.OnNext(2); + xs.OnCompleted(); + + Assert.IsFalse(tcss[0].TrySetResult(43)); + tcss[2].SetResult(44); // never observed because xs.OnNext(2) happened after dispose + + lst.AssertEqual(new[] { 42 + 1 }); + Assert.IsFalse(done); + Assert.AreEqual(2, n); + Assert.AreEqual(1, m); // tcss[1] was already finished + } + + [TestMethod] + public void SelectMany_TaskWithCompletionSource_WithResultSelector_Cancellation_AfterOuterError() + { + var xs = new Subject(); + + var tcss = new TaskCompletionSource[3]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + + var n = 0; + var m = 0; + + var res = Observable.SelectMany(xs, (x, token) => + { + var tcs = tcss[x]; + + token.Register(() => { n++; m += tcs.TrySetCanceled() ? 1 : 0; }); + + return tcs.Task; + }, (x, y) => x + y); + + var lst = new List(); + + var done = false; + var err = default(Exception); + res.Subscribe(lst.Add, ex_ => err = ex_, () => done = true); - [TestMethod] - public void SelectMany_Triple_All_Dispose_Before_First() - { - var scheduler = new TestScheduler(); + tcss[1].SetResult(42); - var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) - ); + xs.OnNext(0); + xs.OnNext(1); - var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Repeat(x, x, scheduler), - ex => Observable.Repeat(0, 2, scheduler), - () => Observable.Repeat(-1, 2, scheduler) - ), - 304 - ); + var ex = new Exception(); + xs.OnError(ex); - res.Messages.AssertEqual( - OnNext(302, 1), - OnNext(303, 2) - ); + Assert.IsFalse(tcss[0].TrySetResult(43)); + tcss[2].SetResult(44); // no-op - xs.Subscriptions.AssertEqual( - Subscribe(200, 304) - ); + lst.AssertEqual(new[] { 42 + 1 }); + Assert.AreSame(ex, err); + Assert.IsFalse(done); + Assert.AreEqual(2, n); + Assert.AreEqual(1, m); // tcss[1] was already finished } [TestMethod] - public void SelectMany_Triple_OnNextThrow() + public void SelectMany_TaskWithCompletionSource_WithResultSelector_Cancellation_AfterSelectorThrows() { - var scheduler = new TestScheduler(); + var xs = new Subject(); - var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) - ); + var tcss = new TaskCompletionSource[4]; + tcss[0] = new TaskCompletionSource(); + tcss[1] = new TaskCompletionSource(); + tcss[2] = new TaskCompletionSource(); + tcss[3] = new TaskCompletionSource(); + + var n = 0; + var m = 0; var ex = new Exception(); - var res = scheduler.Start(() => - xs.SelectMany( - x => Throw>(ex), - ex1 => Observable.Repeat(0, 2, scheduler), - () => Observable.Repeat(-1, 2, scheduler) - ) - ); + var res = Observable.SelectMany(xs, (x, token) => + { + if (x == 2) + throw ex; - res.Messages.AssertEqual( - OnError(300, ex) - ); + var tcs = tcss[x]; - xs.Subscriptions.AssertEqual( - Subscribe(200, 300) - ); - } + token.Register(() => { n++; m += tcs.TrySetCanceled() ? 1 : 0; }); - [TestMethod] - public void SelectMany_Triple_OnErrorThrow() - { - var scheduler = new TestScheduler(); + return tcs.Task; + }, (x, y) => x + y); - var ex = new Exception(); + var lst = new List(); - var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnError(305, new Exception()) - ); + var done = false; + var evt = new ManualResetEvent(false); + var err = default(Exception); + res.Subscribe(lst.Add, ex_ => { err = ex_; evt.Set(); }, () => { done = true; evt.Set(); }); - var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Repeat(x, x, scheduler), - ex1 => Throw>(ex), - () => Observable.Repeat(-1, 2, scheduler) - ) - ); + tcss[1].SetResult(43); - res.Messages.AssertEqual( - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(304, 2), - OnError(305, ex) - ); + xs.OnNext(0); + xs.OnNext(1); - xs.Subscriptions.AssertEqual( - Subscribe(200, 305) - ); + tcss[0].SetResult(42); + + xs.OnNext(2); // causes error + xs.OnCompleted(); + + evt.WaitOne(); + + Assert.IsFalse(done); + Assert.AreSame(ex, err); + Assert.AreEqual(2, n); + Assert.AreEqual(0, m); } [TestMethod] - public void SelectMany_Triple_OnCompletedThrow() + public void SelectManyWithIndex_Task_ArgumentChecking() { - var scheduler = new TestScheduler(); - - var xs = scheduler.CreateHotObservable( - OnNext(300, 0), - OnNext(301, 1), - OnNext(302, 2), - OnNext(303, 3), - OnNext(304, 4), - OnCompleted(305) - ); + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); - var ex = new Exception(); - - var res = scheduler.Start(() => - xs.SelectMany( - x => Observable.Repeat(x, x, scheduler), - ex1 => Observable.Repeat(0, 2, scheduler), - () => Throw>(ex) - ) - ); + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null)); - res.Messages.AssertEqual( - OnNext(302, 1), - OnNext(303, 2), - OnNext(304, 3), - OnNext(304, 2), - OnError(305, ex) - ); + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, ((Func)null))); - xs.Subscriptions.AssertEqual( - Subscribe(200, 305) - ); + ReactiveAssert.Throws(() => ((IObservable)null).SelectMany(DummyFunc>.Instance, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany((Func>)null, DummyFunc.Instance)); + ReactiveAssert.Throws(() => DummyObservable.Instance.SelectMany(DummyFunc>.Instance, ((Func)null))); } -#if !NO_TPL - [TestMethod] - public void SelectMany_Task_ArgumentChecking() + public void SelectManyWithIndex_Task_Index() { - var t = new Task(() => 42); - - ReactiveAssert.Throws(() => Observable.SelectMany(default(IObservable), x => t)); - ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, default(Func>))); + var res = Observable.Range(0, 10).SelectMany((int x, int i) => Task.Factory.StartNew(() => new { x, i })).ToEnumerable(); + Assert.IsTrue(Enumerable.Range(0, 10).SelectMany((x, i) => new[] { new { x, i } }).SequenceEqual(res.OrderBy(v => v.i))); + } - ReactiveAssert.Throws(() => Observable.SelectMany(default(IObservable), (x, ct) => t)); - ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, default(Func>))); + [TestMethod] + public void SelectManyWithIndex_Task_Cancellation_Index() + { + var res = Observable.Range(0, 10).SelectMany((x, i, ctx) => Task.Factory.StartNew(() => new { x, i }, ctx)).ToEnumerable(); + Assert.IsTrue(Enumerable.Range(0, 10).SelectMany((x, i) => new[] { new { x, i } }).SequenceEqual(res.OrderBy(v => v.i))); + } - ReactiveAssert.Throws(() => Observable.SelectMany(default(IObservable), x => t, (x, y) => x)); - ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, default(Func>), (x, y) => x)); - ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, x => t, default(Func))); + [TestMethod] + public void SelectManyWithIndex_Task_ResultSelector_Index() + { + var res = Observable.Range(0, 10).SelectMany((int x, int i) => Task.Factory.StartNew(() => new { x, i }), (x, i, r) => r).ToEnumerable(); + Assert.IsTrue(Enumerable.Range(0, 10).SelectMany((x, i) => new[] { new { x, i } }).SequenceEqual(res.OrderBy(v => v.i))); + } - ReactiveAssert.Throws(() => Observable.SelectMany(default(IObservable), (x, ct) => t, (x, y) => x)); - ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, default(Func>), (x, y) => x)); - ReactiveAssert.Throws(() => Observable.SelectMany(DummyObservable.Instance, (x, ct) => t, default(Func))); + [TestMethod] + public void SelectManyWithIndex_Task_ResultSelector_Cancellation_Index() + { + var res = Observable.Range(0, 10).SelectMany((x, i, ctx) => Task.Factory.StartNew(() => new { x, i }, ctx), (x, i, r) => r).ToEnumerable(); + Assert.IsTrue(Enumerable.Range(0, 10).SelectMany((x, i) => new[] { new { x, i } }).SequenceEqual(res.OrderBy(v => v.i))); } [TestMethod] - public void SelectMany_Task1() + public void SelectManyWithIndex_Task1() { - var res = Observable.Range(0, 10).SelectMany(x => Task.Factory.StartNew(() => x + 1)).ToEnumerable(); + var res = Observable.Range(0, 10).SelectMany((int x, int _) => Task.Factory.StartNew(() => x + 1)).ToEnumerable(); Assert.IsTrue(Enumerable.Range(0, 10).SelectMany(x => new[] { x + 1 }).SequenceEqual(res.OrderBy(x => x))); } [TestMethod] - public void SelectMany_Task2() + public void SelectManyWithIndex_Task2() { - var res = Observable.Range(0, 10).SelectMany((x, ct) => Task.Factory.StartNew(() => x + 1, ct)).ToEnumerable(); + var res = Observable.Range(0, 10).SelectMany((x, _, ct) => Task.Factory.StartNew(() => x + 1, ct)).ToEnumerable(); Assert.IsTrue(Enumerable.Range(0, 10).SelectMany(x => new[] { x + 1 }).SequenceEqual(res.OrderBy(x => x))); } [TestMethod] - public void SelectMany_Task_TaskThrows() + public void SelectManyWithIndex_Task_TaskThrows() { var ex = new Exception(); - var res = Observable.Range(0, 10).SelectMany(x => Task.Factory.StartNew(() => + var res = Observable.Range(0, 10).SelectMany((int x, int _) => Task.Factory.StartNew(() => { if (x > 5) throw ex; @@ -10385,11 +16997,11 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_Task_SelectorThrows() + public void SelectManyWithIndex_Task_SelectorThrows() { var ex = new Exception(); - var res = Observable.Range(0, 10).SelectMany(x => + var res = Observable.Range(0, 10).SelectMany((int x, int _) => { if (x > 5) throw ex; @@ -10404,25 +17016,25 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_Task_ResultSelector1() + public void SelectManyWithIndex_Task_ResultSelector1() { - var res = Observable.Range(0, 10).SelectMany(x => Task.Factory.StartNew(() => x + 1), (x, y) => x + y).ToEnumerable(); + var res = Observable.Range(0, 10).SelectMany((x, _) => Task.Factory.StartNew(() => x + 1), (x, _, y) => x + y).ToEnumerable(); Assert.IsTrue(Enumerable.Range(0, 10).SelectMany(x => new[] { 2 * x + 1 }).SequenceEqual(res.OrderBy(x => x))); } [TestMethod] - public void SelectMany_Task_ResultSelector2() + public void SelectManyWithIndex_Task_ResultSelector2() { - var res = Observable.Range(0, 10).SelectMany((x, ct) => Task.Factory.StartNew(() => x + 1, ct), (x, y) => x + y).ToEnumerable(); + var res = Observable.Range(0, 10).SelectMany((x, _, ct) => Task.Factory.StartNew(() => x + 1, ct), (x, _, y) => x + y).ToEnumerable(); Assert.IsTrue(Enumerable.Range(0, 10).SelectMany(x => new[] { 2 * x + 1 }).SequenceEqual(res.OrderBy(x => x))); } [TestMethod] - public void SelectMany_Task_ResultSelectorThrows() + public void SelectManyWithIndex_Task_ResultSelectorThrows() { var ex = new Exception(); - var res = Observable.Range(0, 10).SelectMany(x => Task.Factory.StartNew(() => x + 1), (x, y) => + var res = Observable.Range(0, 10).SelectMany((x, _) => Task.Factory.StartNew(() => x + 1), (x, _, y) => { if (x > 5) throw ex; @@ -10437,13 +17049,13 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_RanToCompletion_Async() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_RanToCompletion_Async() { var tcss = new TaskCompletionSource[2]; tcss[0] = new TaskCompletionSource(); tcss[1] = new TaskCompletionSource(); - var res = Observable.SelectMany(Observable.Range(0, 2), x => tcss[x].Task); + var res = Observable.SelectMany(Observable.Range(0, 2), (int x, int _) => tcss[x].Task); var lst = new List(); @@ -10459,7 +17071,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_RanToCompletion_Sync() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_RanToCompletion_Sync() { var tcss = new TaskCompletionSource[2]; tcss[0] = new TaskCompletionSource(); @@ -10468,7 +17080,7 @@ namespace ReactiveTests.Tests tcss[0].SetResult(42); tcss[1].SetResult(43); - var res = Observable.SelectMany(Observable.Range(0, 2), x => tcss[x].Task); + var res = Observable.SelectMany(Observable.Range(0, 2), (int x, int _) => tcss[x].Task); var lst = new List(); @@ -10481,14 +17093,14 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_Faulted_Async() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_Faulted_Async() { var tcss = new TaskCompletionSource[3]; tcss[0] = new TaskCompletionSource(); tcss[1] = new TaskCompletionSource(); tcss[2] = new TaskCompletionSource(); - var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task); + var res = Observable.SelectMany(Observable.Range(0, 3), (int x, int _) => tcss[x].Task); var lst = new List(); @@ -10506,7 +17118,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_Faulted_Sync() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_Faulted_Sync() { var tcss = new TaskCompletionSource[3]; tcss[0] = new TaskCompletionSource(); @@ -10516,7 +17128,7 @@ namespace ReactiveTests.Tests var ex = new Exception(); tcss[1].SetException(ex); - var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task); + var res = Observable.SelectMany(Observable.Range(0, 3), (int x, int _) => tcss[x].Task); var lst = new List(); @@ -10531,14 +17143,14 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_Canceled_Async() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_Canceled_Async() { var tcss = new TaskCompletionSource[3]; tcss[0] = new TaskCompletionSource(); tcss[1] = new TaskCompletionSource(); tcss[2] = new TaskCompletionSource(); - var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task); + var res = Observable.SelectMany(Observable.Range(0, 3), (int x, int _) => tcss[x].Task); var lst = new List(); @@ -10555,7 +17167,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_Canceled_Sync() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_Canceled_Sync() { var tcss = new TaskCompletionSource[3]; tcss[0] = new TaskCompletionSource(); @@ -10564,7 +17176,7 @@ namespace ReactiveTests.Tests tcss[1].SetCanceled(); - var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task); + var res = Observable.SelectMany(Observable.Range(0, 3), (int x, int _) => tcss[x].Task); var lst = new List(); @@ -10579,7 +17191,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_InnerCompleteBeforeOuter() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_InnerCompleteBeforeOuter() { var xs = new Subject(); @@ -10588,7 +17200,7 @@ namespace ReactiveTests.Tests tcss[1] = new TaskCompletionSource(); tcss[2] = new TaskCompletionSource(); - var res = Observable.SelectMany(xs, x => tcss[x].Task); + var res = Observable.SelectMany(xs, (int x, int _) => tcss[x].Task); var lst = new List(); @@ -10612,7 +17224,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_OuterCompleteBeforeInner() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_OuterCompleteBeforeInner() { var xs = new Subject(); @@ -10621,7 +17233,7 @@ namespace ReactiveTests.Tests tcss[1] = new TaskCompletionSource(); tcss[2] = new TaskCompletionSource(); - var res = Observable.SelectMany(xs, x => tcss[x].Task); + var res = Observable.SelectMany(xs, (int x, int _) => tcss[x].Task); var lst = new List(); @@ -10644,7 +17256,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_Cancellation_NeverInvoked() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_Cancellation_NeverInvoked() { var xs = new Subject(); @@ -10653,7 +17265,7 @@ namespace ReactiveTests.Tests tcss[1] = new TaskCompletionSource(); tcss[2] = new TaskCompletionSource(); - var res = Observable.SelectMany(xs, (x, token) => + var res = Observable.SelectMany(xs, (x, _, token) => { var tcs = tcss[x]; @@ -10683,7 +17295,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_Cancellation_Invoked() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_Cancellation_Invoked() { var xs = new Subject(); @@ -10695,7 +17307,7 @@ namespace ReactiveTests.Tests var n = 0; var m = 0; - var res = Observable.SelectMany(xs, (x, token) => + var res = Observable.SelectMany(xs, (x, _, token) => { var tcs = tcss[x]; @@ -10729,7 +17341,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_Cancellation_AfterOuterError() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_Cancellation_AfterOuterError() { var xs = new Subject(); @@ -10741,7 +17353,7 @@ namespace ReactiveTests.Tests var n = 0; var m = 0; - var res = Observable.SelectMany(xs, (x, token) => + var res = Observable.SelectMany(xs, (x, _, token) => { var tcs = tcss[x]; @@ -10775,7 +17387,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_Simple_Cancellation_AfterSelectorThrows() + public void SelectManyWithIndex_TaskWithCompletionSource_Simple_Cancellation_AfterSelectorThrows() { var xs = new Subject(); @@ -10790,7 +17402,7 @@ namespace ReactiveTests.Tests var ex = new Exception(); - var res = Observable.SelectMany(xs, (x, token) => + var res = Observable.SelectMany(xs, (x, _, token) => { if (x == 2) throw ex; @@ -10828,13 +17440,13 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_RanToCompletion_Async() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_RanToCompletion_Async() { var tcss = new TaskCompletionSource[2]; tcss[0] = new TaskCompletionSource(); tcss[1] = new TaskCompletionSource(); - var res = Observable.SelectMany(Observable.Range(0, 2), x => tcss[x].Task, (x, y) => x + y); + var res = Observable.SelectMany(Observable.Range(0, 2), (x, _) => tcss[x].Task, (x, _, y) => x + y); var lst = new List(); @@ -10850,7 +17462,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_RanToCompletion_Sync() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_RanToCompletion_Sync() { var tcss = new TaskCompletionSource[2]; tcss[0] = new TaskCompletionSource(); @@ -10859,7 +17471,7 @@ namespace ReactiveTests.Tests tcss[0].SetResult(42); tcss[1].SetResult(43); - var res = Observable.SelectMany(Observable.Range(0, 2), x => tcss[x].Task, (x, y) => x + y); + var res = Observable.SelectMany(Observable.Range(0, 2), (x, _) => tcss[x].Task, (x, _, y) => x + y); var lst = new List(); @@ -10872,14 +17484,14 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_Faulted_Async() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_Faulted_Async() { var tcss = new TaskCompletionSource[3]; tcss[0] = new TaskCompletionSource(); tcss[1] = new TaskCompletionSource(); tcss[2] = new TaskCompletionSource(); - var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task, (x, y) => x + y); + var res = Observable.SelectMany(Observable.Range(0, 3), (x, _) => tcss[x].Task, (x, _, y) => x + y); var lst = new List(); @@ -10897,7 +17509,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_Faulted_Sync() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_Faulted_Sync() { var tcss = new TaskCompletionSource[3]; tcss[0] = new TaskCompletionSource(); @@ -10907,7 +17519,7 @@ namespace ReactiveTests.Tests var ex = new Exception(); tcss[1].SetException(ex); - var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task, (x, y) => x + y); + var res = Observable.SelectMany(Observable.Range(0, 3), (x, _) => tcss[x].Task, (x, _, y) => x + y); var lst = new List(); @@ -10922,14 +17534,14 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_Canceled_Async() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_Canceled_Async() { var tcss = new TaskCompletionSource[3]; tcss[0] = new TaskCompletionSource(); tcss[1] = new TaskCompletionSource(); tcss[2] = new TaskCompletionSource(); - var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task, (x, y) => x + y); + var res = Observable.SelectMany(Observable.Range(0, 3), (x, _) => tcss[x].Task, (x, _, y) => x + y); var lst = new List(); @@ -10946,7 +17558,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_Canceled_Sync() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_Canceled_Sync() { var tcss = new TaskCompletionSource[3]; tcss[0] = new TaskCompletionSource(); @@ -10955,7 +17567,7 @@ namespace ReactiveTests.Tests tcss[1].SetCanceled(); - var res = Observable.SelectMany(Observable.Range(0, 3), x => tcss[x].Task, (x, y) => x + y); + var res = Observable.SelectMany(Observable.Range(0, 3), (x, _) => tcss[x].Task, (x, _, y) => x + y); var lst = new List(); @@ -10970,7 +17582,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_InnerCompleteBeforeOuter() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_InnerCompleteBeforeOuter() { var xs = new Subject(); @@ -10979,7 +17591,7 @@ namespace ReactiveTests.Tests tcss[1] = new TaskCompletionSource(); tcss[2] = new TaskCompletionSource(); - var res = Observable.SelectMany(xs, x => tcss[x].Task, (x, y) => x + y); + var res = Observable.SelectMany(xs, (x, _) => tcss[x].Task, (x, _, y) => x + y); var lst = new List(); @@ -11003,7 +17615,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_OuterCompleteBeforeInner() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_OuterCompleteBeforeInner() { var xs = new Subject(); @@ -11012,7 +17624,7 @@ namespace ReactiveTests.Tests tcss[1] = new TaskCompletionSource(); tcss[2] = new TaskCompletionSource(); - var res = Observable.SelectMany(xs, x => tcss[x].Task, (x, y) => x + y); + var res = Observable.SelectMany(xs, (x, _) => tcss[x].Task, (x, _, y) => x + y); var lst = new List(); @@ -11035,7 +17647,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_Cancellation_NeverInvoked() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_Cancellation_NeverInvoked() { var xs = new Subject(); @@ -11044,14 +17656,14 @@ namespace ReactiveTests.Tests tcss[1] = new TaskCompletionSource(); tcss[2] = new TaskCompletionSource(); - var res = Observable.SelectMany(xs, (x, token) => + var res = Observable.SelectMany(xs, (x, _, token) => { var tcs = tcss[x]; token.Register(() => tcs.SetCanceled()); return tcs.Task; - }, (x, y) => x + y); + }, (x, _, y) => x + y); var lst = new List(); @@ -11074,7 +17686,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_Cancellation_Invoked() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_Cancellation_Invoked() { var xs = new Subject(); @@ -11086,14 +17698,14 @@ namespace ReactiveTests.Tests var n = 0; var m = 0; - var res = Observable.SelectMany(xs, (x, token) => + var res = Observable.SelectMany(xs, (x, _, token) => { var tcs = tcss[x]; token.Register(() => { n++; m += tcs.TrySetCanceled() ? 1 : 0; }); return tcs.Task; - }, (x, y) => x + y); + }, (x, _, y) => x + y); var lst = new List(); @@ -11120,7 +17732,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_Cancellation_AfterOuterError() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_Cancellation_AfterOuterError() { var xs = new Subject(); @@ -11132,14 +17744,14 @@ namespace ReactiveTests.Tests var n = 0; var m = 0; - var res = Observable.SelectMany(xs, (x, token) => + var res = Observable.SelectMany(xs, (x, _, token) => { var tcs = tcss[x]; token.Register(() => { n++; m += tcs.TrySetCanceled() ? 1 : 0; }); return tcs.Task; - }, (x, y) => x + y); + }, (x, _, y) => x + y); var lst = new List(); @@ -11166,7 +17778,7 @@ namespace ReactiveTests.Tests } [TestMethod] - public void SelectMany_TaskWithCompletionSource_WithResultSelector_Cancellation_AfterSelectorThrows() + public void SelectManyWithIndex_TaskWithCompletionSource_WithResultSelector_Cancellation_AfterSelectorThrows() { var xs = new Subject(); @@ -11181,7 +17793,7 @@ namespace ReactiveTests.Tests var ex = new Exception(); - var res = Observable.SelectMany(xs, (x, token) => + var res = Observable.SelectMany(xs, (x, _, token) => { if (x == 2) throw ex; @@ -11191,7 +17803,7 @@ namespace ReactiveTests.Tests token.Register(() => { n++; m += tcs.TrySetCanceled() ? 1 : 0; }); return tcs.Task; - }, (x, y) => x + y); + }, (x, _, y) => x + y); var lst = new List(); diff --git a/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/ObservableTimeTest.cs b/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/ObservableTimeTest.cs index 45be1df..96cd82c 100644 --- a/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/ObservableTimeTest.cs +++ b/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/ObservableTimeTest.cs @@ -2709,6 +2709,20 @@ namespace ReactiveTests.Tests ); } + [TestMethod] + public void Interval_TimeSpan_Zero_DefaultScheduler() + { + var scheduler = new TestScheduler(); + var observer = scheduler.CreateObserver(); + var completed = new ManualResetEventSlim(); + + Observable.Interval(TimeSpan.Zero).TakeWhile(i => i < 10).Subscribe(observer.OnNext, completed.Set); + + completed.Wait(); + + Assert.AreEqual(10, observer.Messages.Count); + } + [TestMethod] public void Interval_TimeSpan_Disposed() { @@ -7446,6 +7460,20 @@ namespace ReactiveTests.Tests ); } + [TestMethod] + public void OneShotTimer_TimeSpan_Zero_DefaultScheduler() + { + var scheduler = new TestScheduler(); + var observer = scheduler.CreateObserver(); + var completed = new ManualResetEventSlim(); + + Observable.Timer(TimeSpan.Zero).Subscribe(observer.OnNext, completed.Set); + + completed.Wait(); + + Assert.AreEqual(1, observer.Messages.Count); + } + [TestMethod] public void OneShotTimer_TimeSpan_Negative() { @@ -7563,6 +7591,20 @@ namespace ReactiveTests.Tests ); } + [TestMethod] + public void RepeatingTimer_TimeSpan_Zero_DefaultScheduler() + { + var scheduler = new TestScheduler(); + var observer = scheduler.CreateObserver(); + var completed = new ManualResetEventSlim(); + + Observable.Timer(TimeSpan.Zero, TimeSpan.Zero).TakeWhile(i => i < 10).Subscribe(observer.OnNext, completed.Set); + + completed.Wait(); + + Assert.AreEqual(10, observer.Messages.Count); + } + [TestMethod] public void RepeatingTimer_DateTimeOffset_TimeSpan_Simple() { diff --git a/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/Subjects/BehaviorSubjectTest.cs b/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/Subjects/BehaviorSubjectTest.cs index 4e4deaf..b9c4684 100644 --- a/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/Subjects/BehaviorSubjectTest.cs +++ b/Rx/NET/Source/Tests.System.Reactive/Tests/Linq/Subjects/BehaviorSubjectTest.cs @@ -431,5 +431,76 @@ namespace ReactiveTests.Tests s.OnError(new Exception()); Assert.IsFalse(s.HasObservers); } + + [TestMethod] + public void Value_Initial() + { + var s = new BehaviorSubject(42); + Assert.AreEqual(42, s.Value); + } + + [TestMethod] + public void Value_First() + { + var s = new BehaviorSubject(42); + Assert.AreEqual(42, s.Value); + + s.OnNext(43); + Assert.AreEqual(43, s.Value); + } + + [TestMethod] + public void Value_Second() + { + var s = new BehaviorSubject(42); + Assert.AreEqual(42, s.Value); + + s.OnNext(43); + Assert.AreEqual(43, s.Value); + + s.OnNext(44); + Assert.AreEqual(44, s.Value); + } + + [TestMethod] + public void Value_FrozenAfterOnCompleted() + { + var s = new BehaviorSubject(42); + Assert.AreEqual(42, s.Value); + + s.OnNext(43); + Assert.AreEqual(43, s.Value); + + s.OnNext(44); + Assert.AreEqual(44, s.Value); + + s.OnCompleted(); + Assert.AreEqual(44, s.Value); + + s.OnNext(1234); + Assert.AreEqual(44, s.Value); + } + + [TestMethod, ExpectedException(typeof(InvalidOperationException))] + public void Value_ThrowsAfterOnError() + { + var s = new BehaviorSubject(42); + Assert.AreEqual(42, s.Value); + + s.OnError(new InvalidOperationException()); + + Assert.Fail("Should not be able to read Value: {0}", s.Value); + } + + [TestMethod, ExpectedException(typeof(ObjectDisposedException))] + public void Value_ThrowsOnDispose() + { + var s = new BehaviorSubject(42); + Assert.AreEqual(42, s.Value); + + s.Dispose(); + + Assert.Fail("Should not be able to read Value: {0}", s.Value); + } } } diff --git a/Rx/NET/Source/packages.config b/Rx/NET/Source/packages.config new file mode 100644 index 0000000..e005221 --- /dev/null +++ b/Rx/NET/Source/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/License.rtf b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/License.rtf new file mode 100644 index 0000000..2fb0cf4 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/License.rtf @@ -0,0 +1,505 @@ +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff40\deff0\stshfdbch0\stshfloch31506\stshfhich31506\stshfbi31506\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs1025{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} +{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;} +{\f11\fbidi \fmodern\fcharset128\fprq1{\*\panose 02020609040205080304}MS Mincho{\*\falt ?l?r ??\'81\'66c};}{\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ????\'a8\'ac??};} +{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f39\fbidi \fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Trebuchet MS{\*\falt Arial};} +{\f40\fbidi \fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Tahoma{\*\falt ?? ??};}{\f41\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@SimSun;}{\f42\fbidi \fmodern\fcharset128\fprq1{\*\panose 02020609040205080304}@MS Mincho;} +{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;}{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}{\f44\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\f45\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f47\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f48\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f49\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\f50\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f51\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f52\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f64\fbidi \fmodern\fcharset238\fprq1 Courier New CE;} +{\f65\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}{\f67\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f68\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f69\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);} +{\f70\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f71\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f72\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);} +{\f156\fbidi \fmodern\fcharset0\fprq1 MS Mincho Western{\*\falt ?l?r ??\'81\'66c};}{\f154\fbidi \fmodern\fcharset238\fprq1 MS Mincho CE{\*\falt ?l?r ??\'81\'66c};}{\f155\fbidi \fmodern\fcharset204\fprq1 MS Mincho Cyr{\*\falt ?l?r ??\'81\'66c};} +{\f157\fbidi \fmodern\fcharset161\fprq1 MS Mincho Greek{\*\falt ?l?r ??\'81\'66c};}{\f158\fbidi \fmodern\fcharset162\fprq1 MS Mincho Tur{\*\falt ?l?r ??\'81\'66c};}{\f161\fbidi \fmodern\fcharset186\fprq1 MS Mincho Baltic{\*\falt ?l?r ??\'81\'66c};} +{\f176\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt ????\'a8\'ac??};}{\f384\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f385\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f387\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;} +{\f388\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f391\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f392\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}{\f434\fbidi \fswiss\fcharset238\fprq2 Trebuchet MS CE{\*\falt Arial};} +{\f435\fbidi \fswiss\fcharset204\fprq2 Trebuchet MS Cyr{\*\falt Arial};}{\f437\fbidi \fswiss\fcharset161\fprq2 Trebuchet MS Greek{\*\falt Arial};}{\f438\fbidi \fswiss\fcharset162\fprq2 Trebuchet MS Tur{\*\falt Arial};} +{\f441\fbidi \fswiss\fcharset186\fprq2 Trebuchet MS Baltic{\*\falt Arial};}{\f444\fbidi \fswiss\fcharset238\fprq2 Tahoma CE{\*\falt ?? ??};}{\f445\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr{\*\falt ?? ??};} +{\f447\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek{\*\falt ?? ??};}{\f448\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur{\*\falt ?? ??};}{\f449\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew){\*\falt ?? ??};} +{\f450\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic){\*\falt ?? ??};}{\f451\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic{\*\falt ?? ??};}{\f452\fbidi \fswiss\fcharset163\fprq2 Tahoma (Vietnamese){\*\falt ?? ??};} +{\f453\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai){\*\falt ?? ??};}{\f456\fbidi \fnil\fcharset0\fprq2 @SimSun Western;}{\f466\fbidi \fmodern\fcharset0\fprq1 @MS Mincho Western;}{\f464\fbidi \fmodern\fcharset238\fprq1 @MS Mincho CE;} +{\f465\fbidi \fmodern\fcharset204\fprq1 @MS Mincho Cyr;}{\f467\fbidi \fmodern\fcharset161\fprq1 @MS Mincho Greek;}{\f468\fbidi \fmodern\fcharset162\fprq1 @MS Mincho Tur;}{\f471\fbidi \fmodern\fcharset186\fprq1 @MS Mincho Baltic;} +{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;} +{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;} +{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;} +{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} +{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \fswiss\fcharset238\fprq2 Arial CE;}{\fbiminor\f31579\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;} +{\fbiminor\f31581\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\fbiminor\f31582\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\fbiminor\f31583\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);} +{\fbiminor\f31584\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);}{\fbiminor\f31585\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\fbiminor\f31586\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255; +\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0; +\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\ctextone\ctint255\cshade255\red0\green0\blue0;}{\*\defchp \f31506\fs22 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \snext0 \sautoupd \sqformat \spriority0 \styrsid15686224 Normal;}{\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext1 \slink15 \sqformat \styrsid15686224 heading 1;}{\s2\ql \fi-363\li720\ri0\sb120\sa120\widctlpar\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0 \rtlch\fcs1 +\ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext2 \slink16 \sqformat \styrsid15686224 heading 2;}{\s3\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\tx1077\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext3 \slink17 \sqformat \styrsid15686224 heading 3;}{\s4\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl3\outlinelevel3\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 +\af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext4 \slink18 \sqformat \styrsid15686224 heading 4;}{\s5\ql \fi-357\li1792\ri0\sb120\sa120\widctlpar +\tx1792\jclisttab\tx2155\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl4\outlinelevel4\adjustright\rin0\lin1792\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext5 \slink19 \sqformat \styrsid15686224 heading 5;}{\s6\ql \fi-357\li2149\ri0\sb120\sa120\widctlpar\jclisttab\tx2152\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl5\outlinelevel5\adjustright\rin0\lin2149\itap0 \rtlch\fcs1 +\af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext6 \slink20 \sqformat \styrsid15686224 heading 6;}{\s7\ql \fi-357\li2506\ri0\sb120\sa120\widctlpar +\jclisttab\tx2509\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl6\outlinelevel6\adjustright\rin0\lin2506\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext7 \slink21 \sqformat \styrsid15686224 heading 7;}{\s8\ql \fi-357\li2863\ri0\sb120\sa120\widctlpar\jclisttab\tx2866\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl7\outlinelevel7\adjustright\rin0\lin2863\itap0 \rtlch\fcs1 +\af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext8 \slink22 \sqformat \styrsid15686224 heading 8;}{\s9\ql \fi-358\li3221\ri0\sb120\sa120\widctlpar +\jclisttab\tx3223\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl8\outlinelevel8\adjustright\rin0\lin3221\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext9 \slink23 \sqformat \styrsid15686224 heading 9;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31506\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}{\*\cs15 \additive +\rtlch\fcs1 \ab\af40\afs19 \ltrch\fcs0 \b\fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink1 \slocked \styrsid15686224 Heading 1 Char;}{\*\cs16 \additive \rtlch\fcs1 \ab\af40\afs19 \ltrch\fcs0 \b\fs19\loch\f40\hich\af40\dbch\af11 +\sbasedon10 \slink2 \slocked \styrsid15686224 Heading 2 Char;}{\*\cs17 \additive \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink3 \slocked \styrsid15686224 Heading 3 Char;}{\*\cs18 \additive \rtlch\fcs1 +\af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink4 \slocked \styrsid15686224 Heading 4 Char;}{\*\cs19 \additive \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 +\sbasedon10 \slink5 \slocked \styrsid15686224 Heading 5 Char;}{\*\cs20 \additive \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink6 \slocked \styrsid15686224 Heading 6 Char;}{\*\cs21 \additive \rtlch\fcs1 +\af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink7 \slocked \styrsid15686224 Heading 7 Char;}{\*\cs22 \additive \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 +\sbasedon10 \slink8 \slocked \styrsid15686224 Heading 8 Char;}{\*\cs23 \additive \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink9 \slocked \styrsid15686224 Heading 9 Char;}{ +\s24\ql \li357\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext24 \styrsid15686224 Body 1;}{\s25\ql \fi-363\li720\ri0\sb120\sa120\widctlpar\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext25 \styrsid15686224 Bullet 2;}{\s26\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar +\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext26 \styrsid15686224 Bullet 4;}{\s27\ql \fi-357\li1792\ri0\sb120\sa120\widctlpar\jclisttab\tx1795\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin1792\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext27 \styrsid15686224 Bullet 5;}{\s28\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\ab\af40\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \styrsid15686224 Heading EULA;}{\s29\ql \li0\ri0\sb120\sa120\widctlpar\brdrb\brdrs\brdrw10\brsp20 +\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af40\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \styrsid15686224 +Heading Software Title;}{\s30\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext30 \styrsid15686224 Preamble;}{\s31\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\tx1077\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls4\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon3 \snext31 \slink38 \styrsid15686224 Heading 3 Bold;}{\s32\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\ul\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon26 \snext32 \styrsid15686224 Bullet 4 Underline;}{\*\cs33 \additive \rtlch\fcs1 \af40 \ltrch\fcs0 \f40\lang1033\langfe1033\langnp1033\langfenp1033 +\sbasedon10 \styrsid15686224 Body 2 Char;}{\*\cs34 \additive \rtlch\fcs1 \af40 \ltrch\fcs0 \f40\lang1033\langfe1033\langnp1033\langfenp1033 \sbasedon10 \styrsid15686224 Body 3 Char;}{\s35\ql \li0\ri0\sb120\sa120\widctlpar\brdrt\brdrs\brdrw10\brsp20 +\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon30 \snext35 \styrsid15686224 +Preamble Border Above;}{\*\cs36 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf2 \sbasedon10 \styrsid15686224 Hyperlink,Char Char7;}{\s37\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \snext0 \slink39 \styrsid15686224 Body 0 Bold;}{\*\cs38 \additive \rtlch\fcs1 \ab\af40\afs19 \ltrch\fcs0 +\b\fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink31 \slocked \styrsid15686224 Heading 3 Bold Char;}{\*\cs39 \additive \rtlch\fcs1 \ab\af40\afs19 \ltrch\fcs0 \b\fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink37 \slocked \styrsid15686224 +Body 0 Bold Char;}{\*\cs40 \additive \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \f40\fs20 \sbasedon10 \slink41 \slocked \styrsid15686224 Bullet 3 Char1;}{\s41\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \f40\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext41 \slink40 \styrsid15686224 Bullet 3;}{ +\s42\ql \fi-357\li357\ri0\sb120\sa120\widctlpar\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \f40\fs20\ul\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 +\sbasedon41 \snext42 \sautoupd \styrsid15686224 Bullet 3 Underline;}{\s43\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af40\afs16\alang1025 \ltrch\fcs0 +\fs16\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext43 \slink44 \ssemihidden \sunhideused \styrsid3699522 Balloon Text;}{\*\cs44 \additive \rtlch\fcs1 \af40\afs16 \ltrch\fcs0 +\fs16\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink43 \slocked \ssemihidden \styrsid3699522 Balloon Text Char;}{\*\cs45 \additive \rtlch\fcs1 \af0\afs16 \ltrch\fcs0 \fs16 \sbasedon10 \ssemihidden \sunhideused \styrsid3699522 annotation reference;}{ +\s46\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext46 \slink47 \ssemihidden \sunhideused \styrsid3699522 annotation text;}{\*\cs47 \additive \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink46 \slocked \ssemihidden \styrsid3699522 +Comment Text Char;}{\s48\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af40\afs20\alang1025 \ltrch\fcs0 +\b\fs20\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon46 \snext46 \slink49 \ssemihidden \sunhideused \styrsid3699522 annotation subject;}{\*\cs49 \additive \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 +\b\fs20\loch\f40\hich\af40\dbch\af11 \sbasedon47 \slink48 \slocked \ssemihidden \styrsid3699522 Comment Subject Char;}}{\*\listtable{\list\listtemplateid1928476992{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af39\afs20 \ltrch\fcs0 \b\i0\f39\fs20\fbias0 \fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af39\afs20 \ltrch\fcs0 \b\i0\f39\fs20\fbias0 \fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\fbias0 \s31\fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0 \fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0 \fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid398796681} +{\list\listtemplateid789093748\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-317712510\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s25\fi-363\li720 +\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23 +\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691 +\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;} +\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid477573462}{\list\listtemplateid1904874988{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\cf0\fbias0 \s1\fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\fbias0 \s2\fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\fbias0 \s3\fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0 \s4\fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0 \s5\fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \s6\fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \s7\fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \s8\fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \s9\fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid752163927}{\list\listtemplateid285099256 +\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-308626962\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s42\fi-357\li1077\jclisttab\tx1080\lin1077 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689 +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;} +\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid1121073746}{\list\listtemplateid303218272\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid612407812 +\'01\u-3913 ?;}{\levelnumbers;}\f3\cf17\fbias0 \s26\fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 +\fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 +\fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1559511898}{\list\listtemplateid-743794326\listhybrid +{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid1229593488\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s41\fi-357\li1077\jclisttab\tx1080\lin1077 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;} +\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760 +\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 } +{\listname ;}\listid1567649130}{\list\listtemplateid-961874242\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-1175557160\'01\u-3913 ?;}{\levelnumbers;} +\f3\fbias0 \s27\fi-357\li1792\jclisttab\tx1795\lin1792 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440 +\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 } +{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1848404271}}{\*\listoverridetable{\listoverride\listid477573462\listoverridecount0\ls1}{\listoverride\listid1559511898\listoverridecount0\ls2} +{\listoverride\listid1848404271\listoverridecount0\ls3}{\listoverride\listid398796681\listoverridecount0\ls4}{\listoverride\listid752163927\listoverridecount0\ls5}{\listoverride\listid398796681\listoverridecount9{\lfolevel\listoverridestartat +\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel +\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}\ls6}{\listoverride\listid1567649130\listoverridecount0\ls7}{\listoverride\listid1559511898\listoverridecount0\ls8} +{\listoverride\listid1121073746\listoverridecount0\ls9}{\listoverride\listid752163927\listoverridecount0\ls10}}{\*\pgptbl {\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp5\itap0\li0\ri0\sb0\sa300}{\pgp\ipgp2\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0 +\sa0}{\pgp\ipgp7\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp1\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp6\itap0\li0\ri0\sb0\sa0}}{\*\rsidtbl \rsid874403\rsid1473980\rsid2177578\rsid2693076\rsid3699522\rsid4000782\rsid4423363\rsid6097754\rsid7214391\rsid8995160\rsid10246973 +\rsid12062545\rsid13846008\rsid14566738\rsid14751308\rsid15014299\rsid15467703\rsid15686224\rsid15928942\rsid15934954}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info +{\author kathan}{\operator Alok Shriram}{\creatim\yr2013\mo3\dy20\hr15\min24}{\revtim\yr2013\mo4\dy3\hr11\min6}{\version5}{\edmins3}{\nofpages4}{\nofwords1342}{\nofchars7656}{\*\company Microsoft Corporation}{\nofcharsws8981}{\vern57427}} +{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect +\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen +\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1440\dgvorigin1440\dghshow1\dgvshow1 +\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct +\asianbrkrule\rsidroot15686224\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0 +{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang +{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang +{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}} +\pard\plain \ltrpar\s28\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs28\alang1025 \ltrch\fcs0 +\b\fs28\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 MICROSOFT SOFTWARE LICENSE TERMS +\par }\pard\plain \ltrpar\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14566738 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224\charrsid7214391 \hich\af40\dbch\af13\loch\f40 MICROSOFT }{\rtlch\fcs1 \ab\af40\afs20 +\ltrch\fcs0 \b\fs20\dbch\af13\insrsid13846008 \hich\af40\dbch\af13\loch\f40 BCL }{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid10246973 \hich\af40\dbch\af13\loch\f40 Portability Pack for .Net \hich\af40\dbch\af13\loch\f40 P +\hich\af40\dbch\af13\loch\f40 latforms }{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid7214391\charrsid7214391 \hich\af40\dbch\af13\loch\f40 PACKAGE}{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 +\b\fs20\dbch\af13\insrsid15686224\charrsid7214391 \hich\af40\dbch\af13\loch\f40 }{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid14751308\charrsid7214391 +\par }\pard\plain \ltrpar\s29\ql \li0\ri0\sb120\sa120\nowidctlpar\brdrb\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs28\alang1025 \ltrch\fcs0 +\b\fs28\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\par }\pard\plain \ltrpar\s30\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms +\hich\af40\dbch\af13\loch\f40 a\hich\af40\dbch\af13\loch\f40 lso apply to any Microsoft +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 updates, +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 supplements, +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 Internet-based services, and +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 support services +\par }\pard\plain \ltrpar\s30\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 +for this software, unless other terms accompany those items. If so, those terms apply. +\par }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEP\hich\af40\dbch\af13\loch\f40 T THEM, DO NOT USE THE SOFTWARE. +\par }\pard\plain \ltrpar\s35\ql \li0\ri0\sb120\sa120\nowidctlpar\brdrt\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\insrsid15686224 \hich\af40\dbch\af11\loch\f40 IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE PERPETUAL RIGHTS BELOW.}{ +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 1.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid14566738 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 INSTALLATION AND USE RIGHTS. }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14566738 \hich\af40\dbch\af13\loch\f40 You}{\rtlch\fcs1 +\ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14566738\charrsid15934954 \hich\af40\dbch\af13\loch\f40 may install and use any number of copies of the software on your devices to design, develop and test your pr\hich\af40\dbch\af13\loch\f40 ograms +}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14566738 .}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224\charrsid14566738 \hich\af40\dbch\af13\loch\f40 2.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid15686224\charrsid14566738 \hich\af40\dbch\af13\loch\f40 DISTRIBUTABLE CODE. }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14566738 \hich\af40\dbch\af13\loch\f40 }{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid15686224\charrsid14566738 \hich\af40\dbch\af13\loch\f40 \hich\f40 The software is comprised of Distributable Code. \'93\loch\f40 \hich\f40 Distributable Code\'94\loch\f40 + is code that you are permitted to distribute in programs you develop if you comply with the terms below. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\fs20\loch\af39\hich\af39\dbch\af13\insrsid15686224 \hich\af39\dbch\af13\loch\f39 a.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 Right to Use and Distribute. +\par {\listtext\pard\plain\ltrpar \s42 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s42\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \f40\fs20\ul\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 +\ulnone\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 Yo\hich\af40\dbch\af13\loch\f40 u may copy and distribute the object code form of the software. +\par {\listtext\pard\plain\ltrpar \s42 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 +Third Party Distribution}{\rtlch\fcs1 \af40 \ltrch\fcs0 \ulnone\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 . You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\fs20\loch\af39\hich\af39\dbch\af13\insrsid15686224 \hich\af39\dbch\af13\loch\f39 b.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 Distribution Requirements. For any Distribu\hich\af40\dbch\af13\loch\f40 +table Code you distribute, you must +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s41\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \f40\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 +\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 add significant primary functionality to it in your programs; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your \hich\af40\dbch\af13\loch\f40 program; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +distribute Distributable Code included in a setup program only as part of that setup program without modification; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +require distributors and external end users to agree to terms that protect it at least as much as this agreement; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 display your valid copyright notice on your programs; and +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +indemnify, defend, and hold harmless Microsoft from any claims, including attorneys\hich\f40 \rquote \loch\f40 fees, related to the distribution or use of your programs. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\fs20\loch\af39\hich\af39\dbch\af13\insrsid15686224 \hich\af39\dbch\af13\loch\f39 c.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 Distribution Restrictions. You may not +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s41\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \f40\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 +\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 alter an\hich\af40\dbch\af13\loch\f40 y copyright, trademark or patent notice in the Distributable Code; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 use Microsoft\hich\f40 \rquote \loch\f40 +s trademarks in your programs\hich\f40 \rquote \loch\f40 names or in a way that suggests your programs come from or are endorsed by Microsoft; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 distribute Distributable Code to run on a platform oth +\hich\af40\dbch\af13\loch\f40 er than the Windows platform; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +include Distributable Code in malicious, deceptive or unlawful programs; or +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License \hich\af40\dbch\af13\loch\f40 is one that requires, as a condition of use, modification or distribution, that + +\par {\listtext\pard\plain\ltrpar \s26 \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\cf17\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s26\ql \fi-358\li1435\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls8\adjustright\rin0\lin1435\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 the code be disclosed or distributed in source code form; or +\par {\listtext\pard\plain\ltrpar \s27 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s27\ql \fi-357\li1792\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1795\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin1792\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 others have the right to modify it. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 3.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 SCOPE OF LICENSE.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 + The software is licensed, not sold. This agreement onl\hich\af40\dbch\af13\loch\f40 +y gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply wit +\hich\af40\dbch\af13\loch\f40 h\hich\af40\dbch\af13\loch\f40 any technical limitations in the software that only allow you to use it in certain ways. You may not +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 work around any technical limitations in the software; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +reverse engineer, decompile or disassemble the software, except and only to the extent that app\hich\af40\dbch\af13\loch\f40 licable law expressly permits, despite this limitation; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 publish the software for others to copy; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 rent, lease or lend the software\hich\af40\dbch\af13\loch\f40 ; + +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 transfer the software or this agreement to any third party; or + +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 use the software for commercial software hosting services. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 4.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 BACKUP COPY.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 + You may make one backup copy of the software. You may use it only to reinstall the software. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 5.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af40\dbch\af13\loch\f40 DOCUMENTATION.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 A\hich\af40\dbch\af13\loch\f40 +ny person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 6.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af40\dbch\af13\loch\f40 EXPORT RESTRICTIONS.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 The software is subject to United States export laws and regulations. You must comply wit +\hich\af40\dbch\af13\loch\f40 h all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see }{\rtlch\fcs1 \ab0\af0\afs20 +\ltrch\fcs0 \cs36\b0\fs20\ul\cf2\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 www.microsoft.com/exporting}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 .}{\rtlch\fcs1 \ab0\af0\afs20 \ltrch\fcs0 +\cs36\b0\fs20\ul\cf2\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 7.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af40\dbch\af13\loch\f40 SUPPORT SERVICES. }{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 Because this \hich\af40\dbch\af13\loch\f40 \hich\f40 software is \'93\loch\f40 \hich\f40 as is,\'94 +\loch\f40 we may not provide support services for it. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 8.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af40\dbch\af13\loch\f40 ENTIRE AGREEMENT.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 + This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support s\hich\af40\dbch\af13\loch\f40 ervices. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 9.\tab}}\pard \ltrpar\s1\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin360\itap0\pararsid15686224 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 APPLICABLE LAW. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 a.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 United States.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 + If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws\hich\af40\dbch\af13\loch\f40 + of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 b.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af40\dbch\af13\loch\f40 Outside the United States.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 If you acquired the software in any other country, the laws of that country app +\hich\af40\dbch\af13\loch\f40 ly. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 10.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 LEGAL EFFECT.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 + This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your right +\hich\af40\dbch\af13\loch\f40 s under the laws of your country if the laws of your country do not permit it to do so. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 11.\tab}}\pard \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 \hich\f40 +DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED \'93\loch\f40 \hich\f40 AS-IS.\'94\loch\f40 YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HA\hich\af40\dbch\af13\loch\f40 +VE ADDITIONAL CONSUMER RIGHTS OR STATUTORY GUARANTEES UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE A +\hich\af40\dbch\af13\loch\f40 N\hich\af40\dbch\af13\loch\f40 D NON-INFRINGEMENT. +\par }\pard\plain \ltrpar\s24\ql \li357\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 FOR AUSTRALIA \hich\f40 \endash \loch\f40 + YOU HAVE STATUTORY GUARANTEES UNDER THE AUSTRALIAN CONSUMER LAW AND NOTHING IN THESE TERMS IS INTENDED TO AFFECT THOSE RIGHTS. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 12.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\insrsid15686224 \hich\af40\dbch\af11\loch\f40 +. YOU CAN RECOVER FROM MICROSOFT AND I\hich\af40\dbch\af11\loch\f40 TS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. +\par }\pard\plain \ltrpar\s24\ql \li357\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 This limitation applies to +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 anything related to the software, services, content (inclu\hich\af40\dbch\af13\loch\f40 ding code) on third party Internet sites, or third party programs; and +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. +\par }\pard\plain \ltrpar\ql \li360\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 It also applies even \hich\af40\dbch\af13\loch\f40 +if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. +\par }\pard \ltrpar\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 {\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 +Please note: A\hich\af40\dbch\af13\loch\f40 s this software is distributed in Quebec, Canada, some of the clauses in this agreement are provided below in French. +\par }{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299 +\par +\par }{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 Remarque : Ce logiciel \'e9\loch\f40 \hich\f40 tant distribu\'e9\loch\f40 \hich\f40 au Qu +\'e9\loch\f40 \hich\f40 bec, Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en fran\'e7\loch\f40 ais. +\par \hich\af40\dbch\af13\loch\f40 EX\hich\af40\dbch\af13\loch\f40 \hich\f40 ON\'c9\loch\f40 RATION DE GARANTIE.}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 +\hich\f40 Le logiciel vis\'e9\loch\f40 \hich\f40 par une licence est offert \'ab\loch\f40 \hich\f40 tel quel \'bb\loch\f40 \hich\f40 . Toute utilisation de ce logiciel est \'e0\loch\f40 \hich\f40 votre seule risque et p\'e9\loch\f40 ril. Microsoft n +\hich\f40 \rquote \loch\f40 \hich\f40 accorde aucune autre garantie expresse. Vous pouvez b\'e9\loch\f40 \hich\f40 n\'e9\loch\f40 ficier de droits additionnels en vertu \hich\af40\dbch\af13\loch\f40 \hich\f40 +du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualit\'e9\loch\f40 marchande, d\hich\f40 \rquote \loch\f40 \hich\f40 ad\'e9\loch\f40 +\hich\f40 quation \'e0\loch\f40 un usage particulier et d\hich\f40 \rquote \loch\f40 \hich\f40 absence de contrefa\'e7\loch\f40 on sont exclues. +\par }{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 LIMITATION DES DOMMAGES-INT\'c9\loch\f40 \hich\f40 R\'ca\loch\f40 \hich\f40 +TS ET EXCLUSION DE RESPONSABILIT\'c9\loch\f40 POUR LES DOMMAGES.}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 + Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement \'e0\loch\f40 \hich\f40 hauteur de 5,00 $ US. Vous ne pouvez pr\'e9\loch\f40 \hich\f40 tendre \'e0\loch\f40 aucune in +\hich\af40\dbch\af13\loch\f40 \hich\f40 demnisation pour les autres dommages, y compris les dommages sp\'e9\loch\f40 \hich\f40 ciaux, indirects ou accessoires et pertes de b\'e9\loch\f40 \hich\f40 n\'e9\loch\f40 fices. +\par }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 Cette limitation concerne : +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\loch\af3\hich\af3\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard \ltrpar +\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0\pararsid15014299 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 +\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 tout ce qui est reli\'e9\loch\f40 au logiciel, aux services ou au contenu (y compris le code) figurant sur des sites I +\hich\af40\dbch\af13\loch\f40 nternet tiers ou dans des programmes tiers ; et +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\loch\af3\hich\af3\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 \hich\f40 les r\'e9 +\loch\f40 \hich\f40 clamations au titre de violation de contrat ou de garantie, ou au titre de responsabilit\'e9\loch\f40 \hich\f40 stricte, de n\'e9\loch\f40 gligence ou d\hich\f40 \rquote \loch\f40 \hich\f40 une autre faute dans la limite autoris\'e9 +\loch\f40 e par la loi en vigueur. +\par }\pard \ltrpar\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 +\hich\af40\dbch\af13\loch\f40 Elle s\hich\f40 \rquote \loch\f40 \hich\f40 applique \'e9\loch\f40 g\hich\af40\dbch\af13\loch\f40 \hich\f40 alement, m\'ea\loch\f40 \hich\f40 me si Microsoft connaissait ou devrait conna\'ee\loch\f40 tre l\hich\f40 \rquote +\'e9\loch\f40 \hich\f40 ventualit\'e9\loch\f40 d\hich\f40 \rquote \loch\f40 un tel dommage. Si votre pays n\hich\f40 \rquote \loch\f40 autorise pas l\hich\f40 \rquote \loch\f40 \hich\f40 exclusion ou la limitation de responsabilit\'e9\loch\f40 + pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut q\hich\af40\dbch\af13\loch\f40 u\hich\af40\dbch\af13\loch\f40 e la limitation ou l\hich\f40 \rquote \loch\f40 exclusion ci-dessus ne s\hich\f40 \rquote \loch\f40 +\hich\f40 appliquera pas \'e0\loch\f40 \hich\f40 votre \'e9\loch\f40 gard. +\par }\pard\plain \ltrpar\s37\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 EFFET JURIDIQUE.}{ +\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 Le pr\'e9\loch\f40 \hich\f40 sent contrat d\'e9\loch\f40 +crit certains droits juridiques. Vous pourriez avoir d\hich\f40 \rquote \loch\f40 \hich\f40 autres droits pr\'e9\loch\f40 \hich\f40 vus par les lois de votre pays. Le pr\'e9\loch\f40 sent contrat ne modif\hich\af40\dbch\af13\loch\f40 \hich\f40 +ie pas les droits que vous conf\'e8\loch\f40 rent les lois de votre pays si celles-ci ne le permettent pas}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299 .}{\rtlch\fcs1 \af40 \ltrch\fcs0 +\insrsid4000782 +\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a +9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad +5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 +b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 +0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 +a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f +c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 +0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 +a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 +6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b +4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b +4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210030dd4329a8060000a41b0000160000007468656d652f7468656d652f +7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87 +615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad +79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b +5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab +999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9 +699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586 +8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6 +0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f +9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be +15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979 +3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d +32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a +f074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86 +e877f0034e16bafb0e258ebb4faf06b769e888340b103d331115bebc4eb813bf83291b63624a0d1475a756c734f9bbc2cd28546ecbe1e20a3794ca175f3fae90 +fb6d2dd99bb07b55e5ccf68942bd0877b23c77b908e8db5f9db7f024d9239010f35bd4bbe2fcae387bfff9e2bc289f2fbe24cfaa301468dd8bd846dbb4ddf1c2 +ae7b4c191ba8292337a469bc25ec3d411f06f53a73e224c5292c8de0516732307070a1c0660d125c7d44553488700a4d7bddd3444299910e254ab984c3a219ae +a4adf1d0f82b7bd46cea4388ad1c12ab5d1ed8e1153d9c9f350a3246aad01c6873462b9ac05999ad5cc988826eafc3acae853a33b7ba11cd1445875ba1b236b1 +399483c90bd560b0b0263435085a21b0f22a9cf9356b38ec6046026d77eba3dc2dc60b17e92219e180643ed27acffba86e9c94c7ca9c225a0f1b0cfae0788ad5 +4adc5a9aec1b703b8b93caec1a0bd8e5de7b132fe5113cf312503b998e2c2927274bd051db6b35979b1ef271daf6c6704e86c73805af4bdd476216c26593af84 +0dfb5393d964f9cc9bad5c313709ea70f561ed3ea7b053075221d51696910d0d339585004b34272bff7213cc7a510a5454a3b349b1b206c1f0af490176745d4b +c663e2abb2b34b23da76f6352ba57ca2881844c1111ab189d8c7e07e1daaa04f40255c77988aa05fe06e4e5bdb4cb9c5394bbaf28d98c1d971ccd20867e556a7 +689ec9166e0a522183792b8907ba55ca6e943bbf2a26e52f48957218ffcf54d1fb09dc3eac04da033e5c0d0b8c74a6b43d2e54c4a10aa511f5fb021a07533b20 +5ae07e17a621a8e082dafc17e450ffb739676998b48643a4daa7211214f623150942f6a02c99e83b85583ddbbb2c4996113211551257a656ec1139246ca86be0 +aadedb3d1441a89b6a929501833b197fee7b9641a3503739e57c732a59b1f7da1cf8a73b1f9bcca0945b874d4393dbbf10b1680f66bbaa5d6f96e77b6f59113d +316bb31a795600b3d256d0cad2fe354538e7566b2bd69cc6cbcd5c38f0e2bcc63058344429dc2121fd07f63f2a7c66bf76e80d75c8f7a1b622f878a18941d840 +545fb28d07d205d20e8ea071b283369834296bdaac75d256cb37eb0bee740bbe278cad253b8bbfcf69eca23973d939b97891c6ce2cecd8da8e2d343578f6648a +c2d0383fc818c798cf64e52f597c740f1cbd05df0c264c49134cf09d4a60e8a107260f20f92d47b374e32f000000ffff0300504b030414000600080000002100 +0dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f7 +8277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89 +d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd500 +1996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0f +bfff0000001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6 +a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a +0000001c00000000000000000000000000190200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021 +0030dd4329a8060000a41b00001600000000000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d001400060008 +00000021000dd1909fb60000001b0100002700000000000000000000000000b20900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000ad0a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax371\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdlocked0 heading 1; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 2;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 3;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 4; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 5;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 6;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 7; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 8;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 6; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 9;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote text; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 header;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footer;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index heading; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of figures;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope address; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope return;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 line number; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 page number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of authorities; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 macro;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 toa heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Closing;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Signature; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 5; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Message Header;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Note Heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Block Text; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 FollowedHyperlink;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Document Map;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Plain Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 E-mail Signature;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Top of Form; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal (Web);\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Acronym;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Address; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Cite;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Code;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Definition;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Keyboard; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Sample;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Typewriter;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority59 \lsdlocked0 Table Grid;\lsdsemihidden1 \lsdlocked0 Placeholder Text;\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; +\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid;\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdpriority65 \lsdlocked0 Medium List 1; +\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List;\lsdpriority71 \lsdlocked0 Colorful Shading; +\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdpriority62 \lsdlocked0 Light Grid Accent 1; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdsemihidden1 \lsdlocked0 Revision;\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph; +\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; +\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1; +\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2; +\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; +\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdpriority60 \lsdlocked0 Light Shading Accent 3; +\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3; +\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdpriority70 \lsdlocked0 Dark List Accent 3; +\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdpriority61 \lsdlocked0 Light List Accent 4; +\lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; +\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdpriority62 \lsdlocked0 Light Grid Accent 5; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5; +\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6; +\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; +\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0 Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0 Plain Table 4; +\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0 Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0 Grid Table 4; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 1; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2; +\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4; +\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 4; +\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6; +\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List Table 3 Accent 1; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent 2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3; +\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 3; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4; +\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4; +\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2 Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent 6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 6;}}{\*\datastore 010500000200000018000000 +4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e50000000000000000000000008082 +82f39530ce01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/Microsoft.Bcl.1.0.19.nupkg b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/Microsoft.Bcl.1.0.19.nupkg new file mode 100644 index 0000000..8383f69 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/Microsoft.Bcl.1.0.19.nupkg differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/Microsoft.Bcl.1.0.19.nuspec b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/Microsoft.Bcl.1.0.19.nuspec new file mode 100644 index 0000000..75e2625 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/Microsoft.Bcl.1.0.19.nuspec @@ -0,0 +1,39 @@ + + + + Microsoft.Bcl + 1.0.19 + BCL Portability Pack for .NET Framework 4, Silverlight 4 and 5, and Windows Phone 7.5 + Microsoft + Microsoft + http://go.microsoft.com/fwlink/?LinkID=296435 + http://go.microsoft.com/fwlink/?LinkID=280057 + http://go.microsoft.com/fwlink/?LinkID=288859 + true + This packages enables projects targeting .NET Framework 4, Silverlight 4 and 5, and Windows Phone 7.5 (including any portable library combinations) to use new types from later versions of .NET including: + +CallerMemberNameAttribute +CallerLineNumberAttribute +CallerFilePathAttribute +Tuple<T1, T2, ...> +IProgress<T> +IStructuralComparable +IStructuralEquatable +Task + +These types are "unified" to their later version equivalent. For example, when running on .NET Framework 4.5, IProgress<T> from this package will be seen by the runtime as the same type as the one already in the platform. + +This package is not required for projects targeting .NET Framework 4.5 or .NET for Windows Store apps. For known issues, please see: http://blogs.msdn.com/b/bclteam/p/asynctargetingpackkb.aspx. + Adds support for types from later versions to .NET Framework 4, Silverlight 4 and 5, and Windows Phone 7.5. + Copyright © Microsoft Corporation + BCL Microsoft System Task IProgress + + + + + + + + + + \ No newline at end of file diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/ReleaseNotes.txt b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/ReleaseNotes.txt new file mode 100644 index 0000000..1bb9317 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/ReleaseNotes.txt @@ -0,0 +1,24 @@ +Changes in 1.0.16-rc +- Fixed: Adding empty content to .NET 4.5, Windows Phone 8, Windows 8 and portable combinations, so that app.config transforms + are not applied to projects targeting them. + +Changes in 1.0.15-rc + +- Fixed: System.Runtime is missing a type forward for Tuple + +Changes in 1.0.14-rc + +- Fixed: System.Runtime now has a fixed version for Phone 7.x due to the lack of a way to redirect them to a later version. + +Changes in 1.0.13-rc + +- Fixed: First-chance exceptions when running on Phone 7.x + +Changes in 1.0.12-rc + +- Fixed: Microsoft.Bcl.targets are not imported when using NuGet 2.0 to install Microsoft.Bcl +- Changed: Pulled build targets into a separate package (Microsoft.Bcl.Build) so other BCL packages can depend on it. + +Changes in 1.0.11-beta + +- Initial release \ No newline at end of file diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/net45/_._ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/net45/_._ new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/portable-net45+win8+wp8/_._ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/portable-net45+win8+wp8/_._ new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/sl4/_._ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/sl4/_._ new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/sl5/_._ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/sl5/_._ new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/win8/_._ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/win8/_._ new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/wp8/_._ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/content/wp8/_._ new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Runtime.dll b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Runtime.dll new file mode 100644 index 0000000..fa831ad Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Runtime.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Runtime.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Runtime.xml new file mode 100644 index 0000000..93cb00d --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Runtime.xml @@ -0,0 +1,56 @@ + + + + System.Runtime + + + + Defines a provider for progress updates. + The type of progress update value. + + + Reports a progress update. + The value of the updated progress. + + + Identities the async state machine type for this method. + + + Identities the state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + Gets the type that implements the state machine. + + + Initializes the attribute. + The type that implements the state machine. + + + + Allows you to obtain the method or property name of the caller to the method. + + + + + Allows you to obtain the line number in the source file at which the method is called. + + + + + Allows you to obtain the full path of the source file that contains the caller. + This is the file path at the time of compile. + + + + Identities the iterator state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Threading.Tasks.dll b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Threading.Tasks.dll new file mode 100644 index 0000000..ebbac4c Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Threading.Tasks.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Threading.Tasks.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Threading.Tasks.xml new file mode 100644 index 0000000..b47921e --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/System.Threading.Tasks.xml @@ -0,0 +1,475 @@ + + + + System.Threading.Tasks + + + + Holds state related to the builder's IAsyncStateMachine. + This is a mutable struct. Be very delicate with it. + + + A reference to the heap-allocated state machine object associated with this builder. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument is null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + + Gets the Action to use with an awaiter's OnCompleted or UnsafeOnCompleted method. + On first invocation, the supplied state machine will be boxed. + + Specifies the type of the method builder used. + Specifies the type of the state machine used. + The builder. + The state machine. + An Action to provide to the awaiter. + + + Provides the ability to invoke a state machine's MoveNext method under a supplied ExecutionContext. + + + The context with which to run MoveNext. + + + The state machine whose MoveNext method should be invoked. + + + Initializes the runner. + The context with which to run MoveNext. + + + Invokes MoveNext under the provided context. + + + Cached delegate used with ExecutionContext.Run. + + + Invokes the MoveNext method on the supplied IAsyncStateMachine. + The IAsyncStateMachine machine instance. + + + Provides a base class used to cache tasks of a specific return type. + Specifies the type of results the cached tasks return. + + + + A singleton cache for this result type. + This may be null if there are no cached tasks for this TResult. + + + + Creates a non-disposable task. + The result for the task. + The cacheable task. + + + Creates a cache. + A task cache for this result type. + + + Gets a cached task if one exists. + The result for which we want a cached task. + A cached task if one exists; otherwise, null. + + + Provides a cache for Boolean tasks. + + + A true task. + + + A false task. + + + Gets a cached task for the Boolean result. + true or false + A cached task for the Boolean result. + + + Provides a cache for zero Int32 tasks. + + + The minimum value, inclusive, for which we want a cached task. + + + The maximum value, exclusive, for which we want a cached task. + + + The cache of Task{Int32}. + + + Creates an array of cached tasks for the values in the range [INCLUSIVE_MIN,EXCLUSIVE_MAX). + + + Gets a cached task for the zero Int32 result. + The integer value + A cached task for the Int32 result or null if not cached. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + Represents an asynchronous method builder. + + + A cached VoidTaskResult task used for builders that complete synchronously. + + + The generic builder object to which this non-generic instance delegates. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state. + + The builder is not initialized. + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + + Gets the for this builder. + The representing the builder's asynchronous operation. + The builder is not initialized. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder{TResult} is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + A cached task for default(TResult). + + + State related to the IAsyncStateMachine. + + + The lazily-initialized task. + Must be named m_task for debugger step-over to work correctly. + + + The lazily-initialized task completion source. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state with the specified result. + + The result to use to complete the task. + The task has already completed. + + + + Completes the builder by using either the supplied completed task, or by completing + the builder's previously accessed task using default(TResult). + + A task already completed with the value default(TResult). + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + This should only be invoked from within an asynchronous method, + and only by the debugger. + + + + + Gets a task for the specified result. This will either + be a cached or new task, never null. + + The result for which we need a task. + The completed task containing the result. + + + Gets the lazily-initialized TaskCompletionSource. + + + Gets the for this builder. + The representing the builder's asynchronous operation. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + + Provides a builder for asynchronous methods that return void. + This type is intended for compiler use only. + + + + The synchronization context associated with this operation. + + + State related to the IAsyncStateMachine. + + + An object used by the debugger to uniquely identify this builder. Lazily initialized. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Registers with UnobservedTaskException to suppress exception crashing. + + + Non-zero if PreventUnobservedTaskExceptions has already been invoked. + + + Initializes a new . + The initialized . + + + Initializes the . + The synchronizationContext associated with this operation. This may be null. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument was null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + Completes the method builder successfully. + + + Faults the method builder with an exception. + The exception that is the cause of this fault. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + + + Notifies the current synchronization context that the operation completed. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger and only in a single-threaded manner. + + + + + Represents state machines generated for asynchronous methods. + This type is intended for compiler use only. + + + + Moves the state machine to its next state. + + + Configures the state machine with a heap-allocated replica. + The heap-allocated replica. + + + + Represents an awaiter used to schedule continuations when an await operation completes. + + + + + Represents an operation that will schedule continuations when the operation completes. + + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + Unlike OnCompleted, UnsafeOnCompleted need not propagate ExecutionContext information. + + + Used with Task(of void) + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/ensureRedirect.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net40/ensureRedirect.xml new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net45/_._ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/net45/_._ new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Runtime.dll b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Runtime.dll new file mode 100644 index 0000000..97ab730 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Runtime.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Runtime.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Runtime.xml new file mode 100644 index 0000000..53f5bef --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Runtime.xml @@ -0,0 +1,860 @@ + + + + System.Runtime + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Argument must be of type {0}.. + + + + + Looks up a localized string similar to The last element of an eight element tuple must be a Tuple.. + + + + + Defines methods to support the comparison of objects for structural equality. + + + + + Determines whether an object is structurally equal to the current instance. + + The object to compare with the current instance. + An object that determines whether the current instance and other are equal. + true if the two objects are equal; otherwise, false. + + + + Returns a hash code for the current instance. + + An object that computes the hash code of the current object. + The hash code for the current instance. + + + + Supports the structural comparison of collection objects. + + + + + Determines whether the current collection object precedes, occurs in the same position as, or follows another object in the sort order. + + The object to compare with the current instance. + An object that compares members of the current collection object with the corresponding members of other. + An integer that indicates the relationship of the current collection object to other. + + This instance and other are not the same type. + + + + + Encapsulates a method that has five parameters and returns a value of the type specified by the TResult parameter. + + The type of the first parameter of the method that this delegate encapsulates. + The type of the second parameter of the method that this delegate encapsulates. + The type of the third parameter of the method that this delegate encapsulates. + The type of the fourth parameter of the method that this delegate encapsulates. + The type of the fifth parameter of the method that this delegate encapsulates. + The type of the return value of the method that this delegate encapsulates. + The first parameter of the method that this delegate encapsulates. + The second parameter of the method that this delegate encapsulates. + The third parameter of the method that this delegate encapsulates. + The fourth parameter of the method that this delegate encapsulates. + The fifth parameter of the method that this delegate encapsulates. + The return value of the method that this delegate encapsulates. + + + Defines a provider for progress updates. + The type of progress update value. + + + Reports a progress update. + The value of the updated progress. + + + Identities the async state machine type for this method. + + + Identities the state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + Gets the type that implements the state machine. + + + Initializes the attribute. + The type that implements the state machine. + + + + Allows you to obtain the method or property name of the caller to the method. + + + + + Allows you to obtain the line number in the source file at which the method is called. + + + + + Allows you to obtain the full path of the source file that contains the caller. + This is the file path at the time of compile. + + + + Identities the iterator state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + + Helper so we can call some tuple methods recursively without knowing the underlying types. + + + + + Provides static methods for creating tuple objects. + + + + + Creates a new 1-tuple, or singleton. + + The type of the only component of the tuple. + The value of the only component of the tuple. + A tuple whose value is (item1). + + + + Creates a new 3-tuple, or pair. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + An 2-tuple (pair) whose value is (item1, item2). + + + + Creates a new 3-tuple, or triple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + An 3-tuple (triple) whose value is (item1, item2, item3). + + + + Creates a new 4-tuple, or quadruple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + An 4-tuple (quadruple) whose value is (item1, item2, item3, item4). + + + + Creates a new 5-tuple, or quintuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + An 5-tuple (quintuple) whose value is (item1, item2, item3, item4, item5). + + + + Creates a new 6-tuple, or sextuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + An 6-tuple (sextuple) whose value is (item1, item2, item3, item4, item5, item6). + + + + Creates a new 7-tuple, or septuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + The type of the seventh component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + The value of the seventh component of the tuple. + An 7-tuple (septuple) whose value is (item1, item2, item3, item4, item5, item6, item7). + + + + Creates a new 8-tuple, or octuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + The type of the seventh component of the tuple. + The type of the eighth component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + The value of the seventh component of the tuple. + The value of the eighth component of the tuple. + An 8-tuple (octuple) whose value is (item1, item2, item3, item4, item5, item6, item7, item8). + + + + Represents a 1-tuple, or singleton. + + The type of the tuple's only component. + + + + Initializes a new instance of the class. + + The value of the current tuple object's single component. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the tuple object's single component. + + + The value of the current tuple object's single component. + + + + + Represents an 2-tuple, or pair. + + The type of the first component of the tuple. + The type of the second component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Represents an 3-tuple, or triple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Represents an 4-tuple, or quadruple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Gets the value of the current tuple object's fourth component. + + + The value of the current tuple object's fourth component. + + + + + Represents an 5-tuple, or quintuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Gets the value of the current tuple object's fourth component. + + + The value of the current tuple object's fourth component. + + + + + Gets the value of the current tuple object's fifth component. + + + The value of the current tuple object's fifth component. + + + + + Represents an 6-tuple, or sextuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Gets the value of the current tuple object's fourth component. + + + The value of the current tuple object's fourth component. + + + + + Gets the value of the current tuple object's fifth component. + + + The value of the current tuple object's fifth component. + + + + + Gets the value of the current tuple object's sixth component. + + + The value of the current tuple object's sixth component. + + + + + Represents an 7-tuple, or septuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + The type of the seventh component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + The value of the seventh component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Gets the value of the current tuple object's fourth component. + + + The value of the current tuple object's fourth component. + + + + + Gets the value of the current tuple object's fifth component. + + + The value of the current tuple object's fifth component. + + + + + Gets the value of the current tuple object's sixth component. + + + The value of the current tuple object's sixth component. + + + + + Gets the value of the current tuple object's seventh component. + + + The value of the current tuple object's seventh component. + + + + + Represents an n-tuple, where n is 8 or greater. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + The type of the seventh component of the tuple. + Any generic Tuple object that defines the types of the tuple's remaining components. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + The value of the seventh component of the tuple. + Any generic Tuple object that contains the values of the tuple's remaining components. + + rest is not a generic Tuple object. + + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Gets the value of the current tuple object's fourth component. + + + The value of the current tuple object's fourth component. + + + + + Gets the value of the current tuple object's fifth component. + + + The value of the current tuple object's fifth component. + + + + + Gets the value of the current tuple object's sixth component. + + + The value of the current tuple object's sixth component. + + + + + Gets the value of the current tuple object's seventh component. + + + The value of the current tuple object's seventh component. + + + + + Gets the current tuple object's remaining components. + + + The value of the current tuple object's remaining components. + + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Threading.Tasks.dll b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Threading.Tasks.dll new file mode 100644 index 0000000..74f5e2c Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Threading.Tasks.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Threading.Tasks.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Threading.Tasks.xml new file mode 100644 index 0000000..6c77012 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/System.Threading.Tasks.xml @@ -0,0 +1,8969 @@ + + + + System.Threading.Tasks + + + + Represents one or more errors that occur during application execution. + + is used to consolidate multiple failures into a single, throwable + exception object. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error + message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + The argument + is null. + + + + Initializes a new instance of the class with + references to the inner exceptions that are the cause of this exception. + + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with + references to the inner exceptions that are the cause of this exception. + + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with a specified error + message and references to the inner exceptions that are the cause of this exception. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with a specified error + message and references to the inner exceptions that are the cause of this exception. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Allocates a new aggregate exception with the specified message and list of inner exceptions. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Returns the that is the root cause of this exception. + + + + + Invokes a handler on each contained by this . + + The predicate to execute for each exception. The predicate accepts as an + argument the to be processed and returns a Boolean to indicate + whether the exception was handled. + + Each invocation of the returns true or false to indicate whether the + was handled. After all invocations, if any exceptions went + unhandled, all unhandled exceptions will be put into a new + which will be thrown. Otherwise, the method simply returns. If any + invocations of the throws an exception, it will halt the processing + of any more exceptions and immediately propagate the thrown exception as-is. + + An exception contained by this was not handled. + The argument is + null. + + + + Flattens an instances into a single, new instance. + + A new, flattened . + + If any inner exceptions are themselves instances of + , this method will recursively flatten all of them. The + inner exceptions returned in the new + will be the union of all of the the inner exceptions from exception tree rooted at the provided + instance. + + + + + Creates and returns a string representation of the current . + + A string representation of the current exception. + + + + Gets a read-only collection of the instances that caused the + current exception. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to One or more errors occurred.. + + + + + Looks up a localized string similar to An element of innerExceptions was null.. + + + + + Looks up a localized string similar to {0}{1}---> (Inner Exception #{2}) {3}{4}{5}. + + + + + Looks up a localized string similar to No tokens were supplied.. + + + + + Looks up a localized string similar to The CancellationTokenSource associated with this CancellationToken has been disposed.. + + + + + Looks up a localized string similar to The CancellationTokenSource has been disposed.. + + + + + Looks up a localized string similar to The SyncRoot property may not be used for the synchronization of concurrent collections.. + + + + + Looks up a localized string similar to The array is multidimensional, or the type parameter for the set cannot be cast automatically to the type of the destination array.. + + + + + Looks up a localized string similar to The index is equal to or greater than the length of the array, or the number of elements in the dictionary is greater than the available space from index to the end of the destination array.. + + + + + Looks up a localized string similar to The capacity argument must be greater than or equal to zero.. + + + + + Looks up a localized string similar to The concurrencyLevel argument must be positive.. + + + + + Looks up a localized string similar to The index argument is less than zero.. + + + + + Looks up a localized string similar to TKey is a reference type and item.Key is null.. + + + + + Looks up a localized string similar to The key already existed in the dictionary.. + + + + + Looks up a localized string similar to The source argument contains duplicate keys.. + + + + + Looks up a localized string similar to The key was of an incorrect type for this dictionary.. + + + + + Looks up a localized string similar to The value was of an incorrect type for this dictionary.. + + + + + Looks up a localized string similar to The lazily-initialized type does not have a public, parameterless constructor.. + + + + + Looks up a localized string similar to ValueFactory returned null.. + + + + + Looks up a localized string similar to The spinCount argument must be in the range 0 to {0}, inclusive.. + + + + + Looks up a localized string similar to There are too many threads currently waiting on the event. A maximum of {0} waiting threads are supported.. + + + + + Looks up a localized string similar to The event has been disposed.. + + + + + Looks up a localized string similar to The operation was canceled.. + + + + + Looks up a localized string similar to The condition argument is null.. + + + + + Looks up a localized string similar to The timeout must represent a value between -1 and Int32.MaxValue, inclusive.. + + + + + Looks up a localized string similar to The specified TaskContinuationOptions combined LongRunning and ExecuteSynchronously. Synchronous continuations should not be long running.. + + + + + Looks up a localized string similar to The specified TaskContinuationOptions excluded all continuation kinds.. + + + + + Looks up a localized string similar to (Internal)An attempt was made to create a LongRunning SelfReplicating task.. + + + + + Looks up a localized string similar to The value needs to translate in milliseconds to -1 (signifying an infinite timeout), 0 or a positive integer less than or equal to Int32.MaxValue.. + + + + + Looks up a localized string similar to The value needs to be either -1 (signifying an infinite timeout), 0 or a positive integer.. + + + + + Looks up a localized string similar to A task may only be disposed if it is in a completion state (RanToCompletion, Faulted or Canceled).. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.LongRunning in calls to FromAsync.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.PreferFairness in calls to FromAsync.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.SelfReplicating in calls to FromAsync.. + + + + + Looks up a localized string similar to FromAsync was called with a TaskManager that had already shut down.. + + + + + Looks up a localized string similar to The tasks argument contains no tasks.. + + + + + Looks up a localized string similar to It is invalid to exclude specific continuation kinds for continuations off of multiple tasks.. + + + + + Looks up a localized string similar to The tasks argument included a null value.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task that was already started.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a continuation task.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task not bound to a delegate, such as the task returned from an asynchronous method.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task that has already completed.. + + + + + Looks up a localized string similar to Start may not be called on a task that was already started.. + + + + + Looks up a localized string similar to Start may not be called on a continuation task.. + + + + + Looks up a localized string similar to Start may not be called on a task with null action.. + + + + + Looks up a localized string similar to Start may not be called on a promise-style task.. + + + + + Looks up a localized string similar to Start may not be called on a task that has completed.. + + + + + Looks up a localized string similar to The task has been disposed.. + + + + + Looks up a localized string similar to The tasks array included at least one null element.. + + + + + Looks up a localized string similar to The awaited task has not yet completed.. + + + + + Looks up a localized string similar to A task was canceled.. + + + + + Looks up a localized string similar to The exceptions collection was empty.. + + + + + Looks up a localized string similar to The exceptions collection included at least one null element.. + + + + + Looks up a localized string similar to A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread.. + + + + + Looks up a localized string similar to (Internal)Expected an Exception or an IEnumerable<Exception>. + + + + + Looks up a localized string similar to ExecuteTask may not be called for a task which was already executed.. + + + + + Looks up a localized string similar to ExecuteTask may not be called for a task which was previously queued to a different TaskScheduler.. + + + + + Looks up a localized string similar to The current SynchronizationContext may not be used as a TaskScheduler.. + + + + + Looks up a localized string similar to The TryExecuteTaskInline call to the underlying scheduler succeeded, but the task body was not invoked.. + + + + + Looks up a localized string similar to An exception was thrown by a TaskScheduler.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.SelfReplicating for a Task<TResult>.. + + + + + Looks up a localized string similar to {Not yet computed}. + + + + + Looks up a localized string similar to A task's Exception may only be set directly if the task was created without a function.. + + + + + Looks up a localized string similar to An attempt was made to transition a task to a final state when it had already completed.. + + + + + Represents a thread-safe collection of keys and values. + + The type of the keys in the dictionary. + The type of the values in the dictionary. + + All public and protected members of are thread-safe and may be used + concurrently from multiple threads. + + + + + Initializes a new instance of the + class that is empty, has the default concurrency level, has the default initial capacity, and + uses the default comparer for the key type. + + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level and capacity, and uses the default + comparer for the key type. + + The estimated number of threads that will update the + concurrently. + The initial number of elements that the + can contain. + is + less than 1. + is less than + 0. + + + + Initializes a new instance of the + class that contains elements copied from the specified , has the default concurrency + level, has the default initial capacity, and uses the default comparer for the key type. + + The whose elements are copied to + the new + . + is a null reference + (Nothing in Visual Basic). + contains one or more + duplicate keys. + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level and capacity, and uses the specified + . + + The + implementation to use when comparing keys. + is a null reference + (Nothing in Visual Basic). + + + + Initializes a new instance of the + class that contains elements copied from the specified , has the default concurrency level, has the default + initial capacity, and uses the specified + . + + The whose elements are copied to + the new + . + The + implementation to use when comparing keys. + is a null reference + (Nothing in Visual Basic). -or- + is a null reference (Nothing in Visual Basic). + + + + + Initializes a new instance of the + class that contains elements copied from the specified , + has the specified concurrency level, has the specified initial capacity, and uses the specified + . + + The estimated number of threads that will update the + concurrently. + The whose elements are copied to the new + . + The implementation to use + when comparing keys. + + is a null reference (Nothing in Visual Basic). + -or- + is a null reference (Nothing in Visual Basic). + + + is less than 1. + + contains one or more duplicate keys. + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level, has the specified initial capacity, and + uses the specified . + + The estimated number of threads that will update the + concurrently. + The initial number of elements that the + can contain. + The + implementation to use when comparing keys. + + is less than 1. -or- + is less than 0. + + is a null reference + (Nothing in Visual Basic). + + + + Attempts to add the specified key and value to the . + + The key of the element to add. + The value of the element to add. The value can be a null reference (Nothing + in Visual Basic) for reference types. + true if the key/value pair was added to the + successfully; otherwise, false. + is null reference + (Nothing in Visual Basic). + The + contains too many elements. + + + + Determines whether the contains the specified + key. + + The key to locate in the . + true if the contains an element with + the specified key; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Attempts to remove and return the the value with the specified key from the + . + + The key of the element to remove and return. + When this method returns, contains the object removed from the + or the default value of + if the operation failed. + true if an object was removed successfully; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Removes the specified key from the dictionary if it exists and returns its associated value. + If matchValue flag is set, the key will be removed only if is associated with a particular + value. + + The key to search for and remove if it exists. + The variable into which the removed value, if found, is stored. + Whether removal of the key is conditional on its value. + The conditional value to compare against if is true + + + + + Attempts to get the value associated with the specified key from the . + + The key of the value to get. + When this method returns, contains the object from + the + with the spedified key or the default value of + , if the operation failed. + true if the key was found in the ; + otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Compares the existing value for the specified key with a specified value, and if they’re equal, + updates the key with a third value. + + The key whose value is compared with and + possibly replaced. + The value that replaces the value of the element with if the comparison results in equality. + The value that is compared to the value of the element with + . + true if the value with was equal to and replaced with ; otherwise, + false. + is a null + reference. + + + + Removes all keys and values from the . + + + + + Copies the elements of the to an array of + type , starting at the + specified array index. + + The one-dimensional array of type + that is the destination of the elements copied from the . The array must have zero-based indexing. + The zero-based index in at which copying + begins. + is a null reference + (Nothing in Visual Basic). + is less than + 0. + is equal to or greater than + the length of the . -or- The number of elements in the source + is greater than the available space from to the end of the destination + . + + + + Copies the key and value pairs stored in the to a + new array. + + A new array containing a snapshot of key and value pairs copied from the . + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToPairs. + + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToEntries. + + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToObjects. + + + + Returns an enumerator that iterates through the . + An enumerator for the . + + The enumerator returned from the dictionary is safe to use concurrently with + reads and writes to the dictionary, however it does not represent a moment-in-time snapshot + of the dictionary. The contents exposed through the enumerator may contain modifications + made to the dictionary after was called. + + + + + Shared internal implementation for inserts and updates. + If key exists, we always return false; and if updateIfExists == true we force update with value; + If key doesn't exist, we always add value and return true; + + + + + Adds a key/value pair to the + if the key does not already exist. + + The key of the element to add. + The function used to generate a value for the key + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The value for the key. This will be either the existing value for the key if the + key is already in the dictionary, or the new value for the key as returned by valueFactory + if the key was not in the dictionary. + + + + Adds a key/value pair to the + if the key does not already exist. + + The key of the element to add. + the value to be added, if the key does not already exist + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The value for the key. This will be either the existing value for the key if the + key is already in the dictionary, or the new value if the key was not in the dictionary. + + + + Adds a key/value pair to the if the key does not already + exist, or updates a key/value pair in the if the key + already exists. + + The key to be added or whose value should be updated + The function used to generate a value for an absent key + The function used to generate a new value for an existing key + based on the key's existing value + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The new value for the key. This will be either be the result of addValueFactory (if the key was + absent) or the result of updateValueFactory (if the key was present). + + + + Adds a key/value pair to the if the key does not already + exist, or updates a key/value pair in the if the key + already exists. + + The key to be added or whose value should be updated + The value to be added for an absent key + The function used to generate a new value for an existing key based on + the key's existing value + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The new value for the key. This will be either be the result of addValueFactory (if the key was + absent) or the result of updateValueFactory (if the key was present). + + + + Adds the specified key and value to the . + + The object to use as the key of the element to add. + The object to use as the value of the element to add. + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + + An element with the same key already exists in the . + + + + Removes the element with the specified key from the . + + The key of the element to remove. + true if the element is successfully remove; otherwise false. This method also returns + false if + was not found in the original . + + is a null reference + (Nothing in Visual Basic). + + + + Adds the specified value to the + with the specified key. + + The + structure representing the key and value to add to the . + The of is null. + The + contains too many elements. + An element with the same key already exists in the + + + + + Determines whether the + contains a specific key and value. + + The + structure to locate in the . + true if the is found in the ; otherwise, false. + + + + Removes a key and value from the dictionary. + + The + structure representing the key and value to remove from the . + true if the key and value represented by is successfully + found and removed; otherwise, false. + The Key property of is a null reference (Nothing in Visual Basic). + + + Returns an enumerator that iterates through the . + An enumerator for the . + + The enumerator returned from the dictionary is safe to use concurrently with + reads and writes to the dictionary, however it does not represent a moment-in-time snapshot + of the dictionary. The contents exposed through the enumerator may contain modifications + made to the dictionary after was called. + + + + + Adds the specified key and value to the dictionary. + + The object to use as the key. + The object to use as the value. + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + + is of a type that is not assignable to the key type of the . -or- + is of a type that is not assignable to , + the type of values in the . + -or- A value with the same key already exists in the . + + + + + Gets whether the contains an + element with the specified key. + + The key to locate in the . + true if the contains + an element with the specified key; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + Provides an for the + . + An for the . + + + + Removes the element with the specified key from the . + + The key of the element to remove. + is a null reference + (Nothing in Visual Basic). + + + + Copies the elements of the to an array, starting + at the specified array index. + + The one-dimensional array that is the destination of the elements copied from + the . The array must have zero-based + indexing. + The zero-based index in at which copying + begins. + is a null reference + (Nothing in Visual Basic). + is less than + 0. + is equal to or greater than + the length of the . -or- The number of elements in the source + is greater than the available space from to the end of the destination + . + + + + Replaces the internal table with a larger one. To prevent multiple threads from resizing the + table as a result of races, the table of buckets that was deemed too small is passed in as + an argument to GrowTable(). GrowTable() obtains a lock, and then checks whether the bucket + table has been replaced in the meantime or not. + + Reference to the bucket table that was deemed too small. + + + + Computes the bucket and lock number for a particular key. + + + + + Acquires all locks for this hash table, and increments locksAcquired by the number + of locks that were successfully acquired. The locks are acquired in an increasing + order. + + + + + Acquires a contiguous range of locks for this hash table, and increments locksAcquired + by the number of locks that were successfully acquired. The locks are acquired in an + increasing order. + + + + + Releases a contiguous range of locks. + + + + + Gets a collection containing the keys in the dictionary. + + + + + Gets a collection containing the values in the dictionary. + + + + + A helper method for asserts. + + + + + Get the data array to be serialized + + + + + Construct the dictionary from a previously seiralized one + + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key. If the specified key is not found, a get + operation throws a + , and a set operation creates a new + element with the specified key. + is a null reference + (Nothing in Visual Basic). + The property is retrieved and + + does not exist in the collection. + + + + Gets the number of key/value pairs contained in the . + + The dictionary contains too many + elements. + The number of key/value paris contained in the . + Count has snapshot semantics and represents the number of items in the + at the moment when Count was accessed. + + + + Gets a value that indicates whether the is empty. + + true if the is empty; otherwise, + false. + + + + Gets a collection containing the keys in the . + + An containing the keys in the + . + + + + Gets a collection containing the values in the . + + An containing the values in + the + . + + + + Gets a value indicating whether the dictionary is read-only. + + true if the is + read-only; otherwise, false. For , this property always returns + false. + + + + Gets a value indicating whether the has a fixed size. + + true if the has a + fixed size; otherwise, false. For , this property always + returns false. + + + + Gets a value indicating whether the is read-only. + + true if the is + read-only; otherwise, false. For , this property always + returns false. + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + + Gets an containing the values in the . + + An containing the values in the . + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key, or a null reference (Nothing in Visual Basic) + if is not in the dictionary or is of a type that is + not assignable to the key type of the . + is a null reference + (Nothing in Visual Basic). + + A value is being assigned, and is of a type that is not assignable to the + key type of the . -or- A value is being + assigned, and is of a type that is not assignable to the value type + of the + + + + + Gets a value indicating whether access to the is + synchronized with the SyncRoot. + + true if access to the is synchronized + (thread safe); otherwise, false. For , this property always + returns false. + + + + Gets an object that can be used to synchronize access to the . This property is not supported. + + The SyncRoot property is not supported. + + + + The number of concurrent writes for which to optimize by default. + + + + + A node in a singly-linked list representing a particular hash table bucket. + + + + + A private class to represent enumeration over the dictionary that implements the + IDictionaryEnumerator interface. + + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + Represents an asynchronous method builder. + + + A cached VoidTaskResult task used for builders that complete synchronously. + + + The generic builder object to which this non-generic instance delegates. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state. + + The builder is not initialized. + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + + Gets the for this builder. + The representing the builder's asynchronous operation. + The builder is not initialized. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + Holds state related to the builder's IAsyncStateMachine. + This is a mutable struct. Be very delicate with it. + + + A reference to the heap-allocated state machine object associated with this builder. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument is null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + + Gets the Action to use with an awaiter's OnCompleted or UnsafeOnCompleted method. + On first invocation, the supplied state machine will be boxed. + + Specifies the type of the method builder used. + Specifies the type of the state machine used. + The builder. + The state machine. + An Action to provide to the awaiter. + + + Provides the ability to invoke a state machine's MoveNext method under a supplied ExecutionContext. + + + The context with which to run MoveNext. + + + The state machine whose MoveNext method should be invoked. + + + Initializes the runner. + The context with which to run MoveNext. + + + Invokes MoveNext under the provided context. + + + Cached delegate used with ExecutionContext.Run. + + + Invokes the MoveNext method on the supplied IAsyncStateMachine. + The IAsyncStateMachine machine instance. + + + + Provides a builder for asynchronous methods that return void. + This type is intended for compiler use only. + + + + The synchronization context associated with this operation. + + + State related to the IAsyncStateMachine. + + + An object used by the debugger to uniquely identify this builder. Lazily initialized. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Registers with UnobservedTaskException to suppress exception crashing. + + + Non-zero if PreventUnobservedTaskExceptions has already been invoked. + + + Initializes a new . + The initialized . + + + Initializes the . + The synchronizationContext associated with this operation. This may be null. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument was null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + Completes the method builder successfully. + + + Faults the method builder with an exception. + The exception that is the cause of this fault. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + + + Notifies the current synchronization context that the operation completed. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger and only in a single-threaded manner. + + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder{TResult} is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + A cached task for default(TResult). + + + State related to the IAsyncStateMachine. + + + The lazily-initialized task. + Must be named m_task for debugger step-over to work correctly. + + + The lazily-initialized task completion source. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state with the specified result. + + The result to use to complete the task. + The task has already completed. + + + + Completes the builder by using either the supplied completed task, or by completing + the builder's previously accessed task using default(TResult). + + A task already completed with the value default(TResult). + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + This should only be invoked from within an asynchronous method, + and only by the debugger. + + + + + Gets a task for the specified result. This will either + be a cached or new task, never null. + + The result for which we need a task. + The completed task containing the result. + + + Gets the lazily-initialized TaskCompletionSource. + + + Gets the for this builder. + The representing the builder's asynchronous operation. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + Provides a base class used to cache tasks of a specific return type. + Specifies the type of results the cached tasks return. + + + + A singleton cache for this result type. + This may be null if there are no cached tasks for this TResult. + + + + Creates a non-disposable task. + The result for the task. + The cacheable task. + + + Creates a cache. + A task cache for this result type. + + + Gets a cached task if one exists. + The result for which we want a cached task. + A cached task if one exists; otherwise, null. + + + Provides a cache for Boolean tasks. + + + A true task. + + + A false task. + + + Gets a cached task for the Boolean result. + true or false + A cached task for the Boolean result. + + + Provides a cache for zero Int32 tasks. + + + The minimum value, inclusive, for which we want a cached task. + + + The maximum value, exclusive, for which we want a cached task. + + + The cache of Task{Int32}. + + + Creates an array of cached tasks for the values in the range [INCLUSIVE_MIN,EXCLUSIVE_MAX). + + + Gets a cached task for the zero Int32 result. + The integer value + A cached task for the Int32 result or null if not cached. + + + + Represents state machines generated for asynchronous methods. + This type is intended for compiler use only. + + + + Moves the state machine to its next state. + + + Configures the state machine with a heap-allocated replica. + The heap-allocated replica. + + + + Represents an awaiter used to schedule continuations when an await operation completes. + + + + + Represents an operation that will schedule continuations when the operation completes. + + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + Unlike OnCompleted, UnsafeOnCompleted need not propagate ExecutionContext information. + + + Used with Task(of void) + + + + An interface similar to the one added in .NET 4.0. + + + + The exception that is thrown in a thread upon cancellation of an operation that the thread was executing. + + + Initializes the exception. + + + Initializes the exception. + The error message that explains the reason for the exception. + + + Initializes the exception. + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + Initializes the exception. + A cancellation token associated with the operation that was canceled. + + + Initializes the exception. + The error message that explains the reason for the exception. + A cancellation token associated with the operation that was canceled. + + + Initializes the exception. + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + A cancellation token associated with the operation that was canceled. + + + Gets a token associated with the operation that was canceled. + + + + A dummy replacement for the .NET internal class StackCrawlMark. + + + + + Propogates notification that operations should be canceled. + + + + A may be created directly in an unchangeable canceled or non-canceled state + using the CancellationToken's constructors. However, to have a CancellationToken that can change + from a non-canceled to a canceled state, + CancellationTokenSource must be used. + CancellationTokenSource exposes the associated CancellationToken that may be canceled by the source through its + Token property. + + + Once canceled, a token may not transition to a non-canceled state, and a token whose + is false will never change to one that can be canceled. + + + All members of this struct are thread-safe and may be used concurrently from multiple threads. + + + + + + Internal constructor only a CancellationTokenSource should create a CancellationToken + + + + + Initializes the CancellationToken. + + + The canceled state for the token. + + + Tokens created with this constructor will remain in the canceled state specified + by the parameter. If is false, + both and will be false. + If is true, + both and will be true. + + + + + Registers a delegate that will be called when this CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + A Boolean value that indicates whether to capture + the current SynchronizationContext and use it + when invoking the . + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The state to pass to the when the delegate is invoked. This may be null. + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The state to pass to the when the delegate is invoked. This may be null. + A Boolean value that indicates whether to capture + the current SynchronizationContext and use it + when invoking the . + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Determines whether the current CancellationToken instance is equal to the + specified token. + + The other CancellationToken to which to compare this + instance. + True if the instances are equal; otherwise, false. Two tokens are equal if they are associated + with the same CancellationTokenSource or if they were both constructed + from public CancellationToken constructors and their values are equal. + + + + Determines whether the current CancellationToken instance is equal to the + specified . + + The other object to which to compare this instance. + True if is a CancellationToken + and if the two instances are equal; otherwise, false. Two tokens are equal if they are associated + with the same CancellationTokenSource or if they were both constructed + from public CancellationToken constructors and their values are equal. + An associated CancellationTokenSource has been disposed. + + + + Serves as a hash function for a CancellationToken. + + A hash code for the current CancellationToken instance. + + + + Determines whether two CancellationToken instances are equal. + + The first instance. + The second instance. + True if the instances are equal; otherwise, false. + An associated CancellationTokenSource has been disposed. + + + + Determines whether two CancellationToken instances are not equal. + + The first instance. + The second instance. + True if the instances are not equal; otherwise, false. + An associated CancellationTokenSource has been disposed. + + + + Throws a OperationCanceledException if + this token has had cancellation requested. + + + This method provides functionality equivalent to: + + if (token.IsCancellationRequested) + throw new OperationCanceledException(token); + + + The token has had cancellation requested. + The associated CancellationTokenSource has been disposed. + + + + Returns an empty CancellationToken value. + + + The value returned by this property will be non-cancelable by default. + + + + + Gets whether cancellation has been requested for this token. + + Whether cancellation has been requested for this token. + + + This property indicates whether cancellation has been requested for this token, + either through the token initially being construted in a canceled state, or through + calling Cancel + on the token's associated . + + + If this property is true, it only guarantees that cancellation has been requested. + It does not guarantee that every registered handler + has finished executing, nor that cancellation requests have finished propagating + to all registered handlers. Additional synchronization may be required, + particularly in situations where related objects are being canceled concurrently. + + + + + + Gets whether this token is capable of being in the canceled state. + + + If CanBeCanceled returns false, it is guaranteed that the token will never transition + into a canceled state, meaning that will never + return true. + + + + + Gets a that is signaled when the token is canceled. + + Accessing this property causes a WaitHandle + to be instantiated. It is preferable to only use this property when necessary, and to then + dispose the associated instance at the earliest opportunity (disposing + the source will dispose of this allocated handle). The handle should not be closed or disposed directly. + + The associated CancellationTokenSource has been disposed. + + + + Represents a callback delegate that has been registered with a CancellationToken. + + + To unregister a callback, dispose the corresponding Registration instance. + + + + + Attempts to deregister the item. If it's already being run, this may fail. + Entails a full memory fence. + + True if the callback was found and deregistered, false otherwise. + + + + Disposes of the registration and unregisters the target callback from the associated + CancellationToken. + If the target callback is currently executing this method will wait until it completes, except + in the degenerate cases where a callback method deregisters itself. + + + + + Determines whether two CancellationTokenRegistration + instances are equal. + + The first instance. + The second instance. + True if the instances are equal; otherwise, false. + + + + Determines whether two CancellationTokenRegistration instances are not equal. + + The first instance. + The second instance. + True if the instances are not equal; otherwise, false. + + + + Determines whether the current CancellationTokenRegistration instance is equal to the + specified . + + The other object to which to compare this instance. + True, if both this and are equal. False, otherwise. + Two CancellationTokenRegistration instances are equal if + they both refer to the output of a single call to the same Register method of a + CancellationToken. + + + + + Determines whether the current CancellationToken instance is equal to the + specified . + + The other CancellationTokenRegistration to which to compare this instance. + True, if both this and are equal. False, otherwise. + Two CancellationTokenRegistration instances are equal if + they both refer to the output of a single call to the same Register method of a + CancellationToken. + + + + + Serves as a hash function for a CancellationTokenRegistration.. + + A hash code for the current CancellationTokenRegistration instance. + + + + Signals to a that it should be canceled. + + + + is used to instantiate a + (via the source's Token property) + that can be handed to operations that wish to be notified of cancellation or that can be used to + register asynchronous operations for cancellation. That token may have cancellation requested by + calling to the source's Cancel + method. + + + All members of this class, except Dispose, are thread-safe and may be used + concurrently from multiple threads. + + + + + The ID of the thread currently executing the main body of CTS.Cancel() + this helps us to know if a call to ctr.Dispose() is running 'within' a cancellation callback. + This is updated as we move between the main thread calling cts.Cancel() and any syncContexts that are used to + actually run the callbacks. + + + + Initializes the . + + + + + Communicates a request for cancellation. + + + + The associated will be + notified of the cancellation and will transition to a state where + IsCancellationRequested returns true. + Any callbacks or cancelable operations + registered with the will be executed. + + + Cancelable operations and callbacks registered with the token should not throw exceptions. + However, this overload of Cancel will aggregate any exceptions thrown into a , + such that one callback throwing an exception will not prevent other registered callbacks from being executed. + + + The that was captured when each callback was registered + will be reestablished when the callback is invoked. + + + An aggregate exception containing all the exceptions thrown + by the registered callbacks on the associated . + This has been disposed. + + + + Communicates a request for cancellation. + + + + The associated will be + notified of the cancellation and will transition to a state where + IsCancellationRequested returns true. + Any callbacks or cancelable operations + registered with the will be executed. + + + Cancelable operations and callbacks registered with the token should not throw exceptions. + If is true, an exception will immediately propagate out of the + call to Cancel, preventing the remaining callbacks and cancelable operations from being processed. + If is false, this overload will aggregate any + exceptions thrown into a , + such that one callback throwing an exception will not prevent other registered callbacks from being executed. + + + The that was captured when each callback was registered + will be reestablished when the callback is invoked. + + + Specifies whether exceptions should immediately propagate. + An aggregate exception containing all the exceptions thrown + by the registered callbacks on the associated . + This has been disposed. + + + + Releases the resources used by this . + + + This method is not thread-safe for any other concurrent calls. + + + + + Throws an exception if the source has been disposed. + + + + + InternalGetStaticSource() + + Whether the source should be set. + A static source to be shared among multiple tokens. + + + + Registers a callback object. If cancellation has already occurred, the + callback will have been run by the time this method returns. + + + + + + + + + + Invoke the Canceled event. + + + The handlers are invoked synchronously in LIFO order. + + + + + Creates a CancellationTokenSource that will be in the canceled state + when any of the source tokens are in the canceled state. + + The first CancellationToken to observe. + The second CancellationToken to observe. + A CancellationTokenSource that is linked + to the source tokens. + A CancellationTokenSource associated with + one of the source tokens has been disposed. + + + + Creates a CancellationTokenSource that will be in the canceled state + when any of the source tokens are in the canceled state. + + The CancellationToken instances to observe. + A CancellationTokenSource that is linked + to the source tokens. + is null. + A CancellationTokenSource associated with + one of the source tokens has been disposed. + + + + Gets whether cancellation has been requested for this CancellationTokenSource. + + Whether cancellation has been requested for this CancellationTokenSource. + + + This property indicates whether cancellation has been requested for this token source, such as + due to a call to its + Cancel method. + + + If this property returns true, it only guarantees that cancellation has been requested. It does not + guarantee that every handler registered with the corresponding token has finished executing, nor + that cancellation requests have finished propagating to all registered handlers. Additional + synchronization may be required, particularly in situations where related objects are being + canceled concurrently. + + + + + + A simple helper to determine whether cancellation has finished. + + + + + A simple helper to determine whether disposal has occured. + + + + + The ID of the thread that is running callbacks. + + + + + Gets the CancellationToken + associated with this . + + The CancellationToken + associated with this . + The token source has been + disposed. + + + + + + + + + + + + + + The currently executing callback + + + + + A helper class for collating the various bits of information required to execute + cancellation callbacks. + + + + + InternalExecuteCallbackSynchronously_GeneralPath + This will be called on the target synchronization context, however, we still need to restore the required execution context + + + + + A sparsely populated array. Elements can be sparse and some null, but this allows for + lock-free additions and growth, and also for constant time removal (by nulling out). + + The kind of elements contained within. + + + + Allocates a new array with the given initial size. + + How many array slots to pre-allocate. + + + + Adds an element in the first available slot, beginning the search from the tail-to-head. + If no slots are available, the array is grown. The method doesn't return until successful. + + The element to add. + Information about where the add happened, to enable O(1) deregistration. + + + + The tail of the doubly linked list. + + + + + A struct to hold a link to the exact spot in an array an element was inserted, enabling + constant time removal later on. + + + + + A fragment of a sparsely populated array, doubly linked. + + The kind of elements contained within. + + + + Provides lazy initialization routines. + + + These routines avoid needing to allocate a dedicated, lazy-initialization instance, instead using + references to ensure targets have been initialized as they are accessed. + + + + + Initializes a target reference type with the type's default constructor if the target has not + already been initialized. + + The refence type of the reference to be initialized. + A reference of type to initialize if it has not + already been initialized. + The initialized reference of type . + Type does not have a default + constructor. + + Permissions to access the constructor of type were missing. + + + + This method may only be used on reference types. To ensure initialization of value + types, see other overloads of EnsureInitialized. + + + This method may be used concurrently by multiple threads to initialize . + In the event that multiple threads access this method concurrently, multiple instances of + may be created, but only one will be stored into . In such an occurrence, this method will not dispose of the + objects that were not stored. If such objects must be disposed, it is up to the caller to determine + if an object was not used and to then dispose of the object appropriately. + + + + + + Initializes a target reference type using the specified function if it has not already been + initialized. + + The reference type of the reference to be initialized. + The reference of type to initialize if it has not + already been initialized. + The invoked to initialize the + reference. + The initialized reference of type . + Type does not have a + default constructor. + returned + null. + + + This method may only be used on reference types, and may + not return a null reference (Nothing in Visual Basic). To ensure initialization of value types or + to allow null reference types, see other overloads of EnsureInitialized. + + + This method may be used concurrently by multiple threads to initialize . + In the event that multiple threads access this method concurrently, multiple instances of + may be created, but only one will be stored into . In such an occurrence, this method will not dispose of the + objects that were not stored. If such objects must be disposed, it is up to the caller to determine + if an object was not used and to then dispose of the object appropriately. + + + + + + Initialize the target using the given delegate (slow path). + + The reference type of the reference to be initialized. + The variable that need to be initialized + The delegate that will be executed to initialize the target + The initialized variable + + + + Initializes a target reference or value type with its default constructor if it has not already + been initialized. + + The type of the reference to be initialized. + A reference or value of type to initialize if it + has not already been initialized. + A reference to a boolean that determines whether the target has already + been initialized. + A reference to an object used as the mutually exclusive lock for initializing + . + The initialized value of type . + + + + Initializes a target reference or value type with a specified function if it has not already been + initialized. + + The type of the reference to be initialized. + A reference or value of type to initialize if it + has not already been initialized. + A reference to a boolean that determines whether the target has already + been initialized. + A reference to an object used as the mutually exclusive lock for initializing + . + The invoked to initialize the + reference or value. + The initialized value of type . + + + + Ensure the target is initialized and return the value (slow path). This overload permits nulls + and also works for value type targets. Uses the supplied function to create the value. + + The type of target. + A reference to the target to be initialized. + A reference to a location tracking whether the target has been initialized. + A reference to a location containing a mutual exclusive lock. + + The to invoke in order to produce the lazily-initialized value. + + The initialized object. + + + + Provides a slimmed down version of . + + + All public and protected members of are thread-safe and may be used + concurrently from multiple threads, with the exception of Dispose, which + must only be used when all other operations on the have + completed, and Reset, which should only be used when no other threads are + accessing the event. + + + + + Initializes a new instance of the + class with an initial state of nonsignaled. + + + + + Initializes a new instance of the + class with a Boolen value indicating whether to set the intial state to signaled. + + true to set the initial state signaled; false to set the initial state + to nonsignaled. + + + + Initializes a new instance of the + class with a Boolen value indicating whether to set the intial state to signaled and a specified + spin count. + + true to set the initial state to signaled; false to set the initial state + to nonsignaled. + The number of spin waits that will occur before falling back to a true + wait. + is less than + 0 or greater than the maximum allowed value. + + + + Initializes the internal state of the event. + + Whether the event is set initially or not. + The spin count that decides when the event will block. + + + + Helper to ensure the lock object is created before first use. + + + + + This method lazily initializes the event object. It uses CAS to guarantee that + many threads racing to call this at once don't result in more than one event + being stored and used. The event will be signaled or unsignaled depending on + the state of the thin-event itself, with synchronization taken into account. + + True if a new event was created and stored, false otherwise. + + + + Sets the state of the event to signaled, which allows one or more threads waiting on the event to + proceed. + + + + + Private helper to actually perform the Set. + + Indicates whether we are calling Set() during cancellation. + The object has been canceled. + + + + Sets the state of the event to nonsignaled, which causes threads to block. + + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + Blocks the current thread until the current is set. + + + The maximum number of waiters has been exceeded. + + + The caller of this method blocks indefinitely until the current instance is set. The caller will + return immediately if the event is currently in a set state. + + + + + Blocks the current thread until the current receives a signal, + while observing a . + + The to + observe. + + The maximum number of waiters has been exceeded. + + was + canceled. + + The caller of this method blocks indefinitely until the current instance is set. The caller will + return immediately if the event is currently in a set state. + + + + + Blocks the current thread until the current is set, using a + to measure the time interval. + + A that represents the number of milliseconds + to wait, or a that represents -1 milliseconds to wait indefinitely. + + true if the was set; otherwise, + false. + is a negative + number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater + than . + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + to measure the time interval, while observing a . + + A that represents the number of milliseconds + to wait, or a that represents -1 milliseconds to wait indefinitely. + + The to + observe. + true if the was set; otherwise, + false. + is a negative + number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater + than . + was canceled. + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + 32-bit signed integer to measure the time interval. + + The number of milliseconds to wait, or (-1) to wait indefinitely. + true if the was set; otherwise, + false. + is a + negative number other than -1, which represents an infinite time-out. + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + 32-bit signed integer to measure the time interval, while observing a . + + The number of milliseconds to wait, or (-1) to wait indefinitely. + The to + observe. + true if the was set; otherwise, + false. + is a + negative number other than -1, which represents an infinite time-out. + + The maximum number of waiters has been exceeded. + + was canceled. + + + + Releases all resources used by the current instance of . + + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + When overridden in a derived class, releases the unmanaged resources used by the + , and optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only unmanaged resources. + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + Throw ObjectDisposedException if the MRES is disposed + + + + + Private helper method to wake up waiters when a cancellationToken gets canceled. + + + + + Private helper method for updating parts of a bit-string state value. + Mainly called from the IsSet and Waiters properties setters + + + Note: the parameter types must be int as CompareExchange cannot take a Uint + + The new value + The mask used to set the bits + + + + Private helper method - performs Mask and shift, particular helpful to extract a field from a packed word. + eg ExtractStatePortionAndShiftRight(0x12345678, 0xFF000000, 24) => 0x12, ie extracting the top 8-bits as a simple integer + + ?? is there a common place to put this rather than being private to MRES? + + + + + + + + + Performs a Mask operation, but does not perform the shift. + This is acceptable for boolean values for which the shift is unnecessary + eg (val & Mask) != 0 is an appropriate way to extract a boolean rather than using + ((val & Mask) >> shiftAmount) == 1 + + ?? is there a common place to put this rather than being private to MRES? + + + + + + + Helper function to measure and update the wait time + + The first time (in Ticks) observed when the wait started. + The orginal wait timeoutout in milliseconds. + The new wait time in milliseconds, -1 if the time expired, -2 if overflow in counters + has occurred. + + + + Gets the underlying object for this . + + The underlying event object fore this . + + Accessing this property forces initialization of an underlying event object if one hasn't + already been created. To simply wait on this , + the public Wait methods should be preferred. + + + + + Gets whether the event is set. + + true if the event has is set; otherwise, false. + + + + Gets the number of spin waits that will be occur before falling back to a true wait. + + + + + How many threads are waiting. + + + + + Provides support for spin-based waiting. + + + + encapsulates common spinning logic. On single-processor machines, yields are + always used instead of busy waits, and on computers with Intel™ processors employing Hyper-Threading™ + technology, it helps to prevent hardware thread starvation. SpinWait encapsulates a good mixture of + spinning and true yielding. + + + is a value type, which means that low-level code can utilize SpinWait without + fear of unnecessary allocation overheads. SpinWait is not generally useful for ordinary applications. + In most cases, you should use the synchronization classes provided by the .NET Framework, such as + . For most purposes where spin waiting is required, however, + the type should be preferred over the System.Threading.Thread.SpinWait method. + + + While SpinWait is designed to be used in concurrent applications, it is not designed to be + used from multiple threads concurrently. SpinWait's members are not thread-safe. If multiple + threads must spin, each should use its own instance of SpinWait. + + + + + + Performs a single spin. + + + This is typically called in a loop, and may change in behavior based on the number of times a + has been called thus far on this instance. + + + + + Resets the spin counter. + + + This makes and behave as though no calls + to had been issued on this instance. If a instance + is reused many times, it may be useful to reset it to avoid yielding too soon. + + + + + Spins until the specified condition is satisfied. + + A delegate to be executed over and over until it returns true. + The argument is null. + + + + Spins until the specified condition is satisfied or until the specified timeout is expired. + + A delegate to be executed over and over until it returns true. + + A that represents the number of milliseconds to wait, + or a TimeSpan that represents -1 milliseconds to wait indefinitely. + True if the condition is satisfied within the timeout; otherwise, false + The argument is null. + is a negative number + other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater than + . + + + + Spins until the specified condition is satisfied or until the specified timeout is expired. + + A delegate to be executed over and over until it returns true. + The number of milliseconds to wait, or (-1) to wait indefinitely. + True if the condition is satisfied within the timeout; otherwise, false + The argument is null. + is a + negative number other than -1, which represents an infinite time-out. + + + + Gets the number of times has been called on this instance. + + + + + Gets whether the next call to will yield the processor, triggering a + forced context switch. + + Whether the next call to will yield the processor, triggering a + forced context switch. + + On a single-CPU machine, always yields the processor. On machines with + multiple CPUs, may yield after an unspecified number of calls. + + + + + A helper class to get the number of preocessors, it updates the numbers of processors every sampling interval + + + + + Gets the number of available processors + + + + + Gets whether the current machine has only a single processor. + + + + + Represents an asynchronous operation that produces a result at some time in the future. + + + The type of the result produced by this . + + + + instances may be created in a variety of ways. The most common approach is by + using the task's property to retrieve a instance that can be used to create tasks for several + purposes. For example, to create a that runs a function, the factory's StartNew + method may be used: + + // C# + var t = Task<int>.Factory.StartNew(() => GenerateResult()); + - or - + var t = Task.Factory.StartNew(() => GenerateResult()); + + ' Visual Basic + Dim t = Task<int>.Factory.StartNew(Function() GenerateResult()) + - or - + Dim t = Task.Factory.StartNew(Function() GenerateResult()) + + + + The class also provides constructors that initialize the task but that do not + schedule it for execution. For performance reasons, the StartNew method should be the + preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation + and scheduling must be separated, the constructors may be used, and the task's + Start + method may then be used to schedule the task for execution at a later time. + + + All members of , except for + Dispose, are thread-safe + and may be used from multiple threads concurrently. + + + + + + Represents an asynchronous operation. + + + + instances may be created in a variety of ways. The most common approach is by + using the Task type's property to retrieve a instance that can be used to create tasks for several + purposes. For example, to create a that runs an action, the factory's StartNew + method may be used: + + // C# + var t = Task.Factory.StartNew(() => DoAction()); + + ' Visual Basic + Dim t = Task.Factory.StartNew(Function() DoAction()) + + + + The class also provides constructors that initialize the Task but that do not + schedule it for execution. For performance reasons, TaskFactory's StartNew method should be the + preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation + and scheduling must be separated, the constructors may be used, and the task's + method may then be used to schedule the task for execution at a later time. + + + All members of , except for , are thread-safe + and may be used from multiple threads concurrently. + + + For operations that return values, the class + should be used. + + + For developers implementing custom debuggers, several internal and private members of Task may be + useful (these may change from release to release). The Int32 m_taskId field serves as the backing + store for the property, however accessing this field directly from a debugger may be + more efficient than accessing the same value through the property's getter method (the + s_taskIdCounter Int32 counter is used to retrieve the next available ID for a Task). Similarly, the + Int32 m_stateFlags field stores information about the current lifecycle stage of the Task, + information also accessible through the property. The m_action System.Object + field stores a reference to the Task's delegate, and the m_stateObject System.Object field stores the + async state passed to the Task by the developer. Finally, for debuggers that parse stack frames, the + InternalWait method serves a potential marker for when a Task is entering a wait operation. + + + + + + A type initializer that runs with the appropriate permissions. + + + + + Initializes a new with the specified action. + + The delegate that represents the code to execute in the Task. + The argument is null. + + + + Initializes a new with the specified action and CancellationToken. + + The delegate that represents the code to execute in the Task. + The CancellationToken + that will be assigned to the new Task. + The argument is null. + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action and creation options. + + The delegate that represents the code to execute in the task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action and creation options. + + The delegate that represents the code to execute in the task. + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action and state. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + + The argument is null. + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + The that will be assigned to the new task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + An internal constructor used by the factory methods on task and its descendent(s). + This variant does not capture the ExecutionContext; it is up to the caller to do that. + + An action to execute. + Optional state to pass to the action. + Parent of Task. + A CancellationToken for the task. + A task scheduler under which the task will run. + Options to control its execution. + Internal options to control its execution + + + + Common logic used by the following internal ctors: + Task() + Task(object action, object state, Task parent, TaskCreationOptions options, TaskScheduler taskScheduler) + + ASSUMES THAT m_creatingTask IS ALREADY SET. + + + Action for task to execute. + Object to which to pass to action (may be null) + Task scheduler on which to run thread (only used by continuation tasks). + A CancellationToken for the Task. + Options to customize behavior of Task. + Internal options to customize behavior of Task. + + + + Checks if we registered a CT callback during construction, and deregisters it. + This should be called when we know the registration isn't useful anymore. Specifically from Finish() if the task has completed + successfully or with an exception. + + + + + Captures the ExecutionContext so long as flow isn't suppressed. + + A stack crawl mark pointing to the frame of the caller. + + + + Internal function that will be called by a new child task to add itself to + the children list of the parent (this). + + Since a child task can only be created from the thread executing the action delegate + of this task, reentrancy is neither required nor supported. This should not be called from + anywhere other than the task construction/initialization codepaths. + + + + + Starts the , scheduling it for execution to the current TaskScheduler. + + + A task may only be started and run only once. Any attempts to schedule a task a second time + will result in an exception. + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Starts the , scheduling it for execution to the specified TaskScheduler. + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + The TaskScheduler with which to associate + and execute this task. + + + The argument is null. + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Runs the synchronously on the current TaskScheduler. + + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + Tasks executed with will be associated with the current TaskScheduler. + + + If the target scheduler does not support running this Task on the current thread, the Task will + be scheduled for execution on the scheduler, and the current thread will block until the + Task has completed execution. + + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Runs the synchronously on the scheduler provided. + + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + If the target scheduler does not support running this Task on the current thread, the Task will + be scheduled for execution on the scheduler, and the current thread will block until the + Task has completed execution. + + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + The parameter + is null. + The scheduler on which to attempt to run this task inline. + + + + Throws an exception if the task has been disposed, and hence can no longer be accessed. + + The task has been disposed. + + + + Sets the internal completion event. + + + + + Disposes the , releasing all of its unmanaged resources. + + + Unlike most of the members of , this method is not thread-safe. + Also, may only be called on a that is in one of + the final states: RanToCompletion, + Faulted, or + Canceled. + + + The exception that is thrown if the is not in + one of the final states: RanToCompletion, + Faulted, or + Canceled. + + + + + Disposes the , releasing all of its unmanaged resources. + + + A Boolean value that indicates whether this method is being called due to a call to . + + + Unlike most of the members of , this method is not thread-safe. + + + + + Schedules the task for execution. + + If true, TASK_STATE_STARTED bit is turned on in + an atomic fashion, making sure that TASK_STATE_CANCELED does not get set + underneath us. If false, TASK_STATE_STARTED bit is OR-ed right in. This + allows us to streamline things a bit for StartNew(), where competing cancellations + are not a problem. + + + + Adds an exception to the list of exceptions this task has thrown. + + An object representing either an Exception or a collection of Exceptions. + + + + Returns a list of exceptions by aggregating the holder's contents. Or null if + no exceptions have been thrown. + + Whether to include a TCE if cancelled. + An aggregate exception, or null if no exceptions have been caught. + + + + Throws an aggregate exception if the task contains exceptions. + + + + + Checks whether this is an attached task, and whether we are being called by the parent task. + And sets the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag based on that. + + This is meant to be used internally when throwing an exception, and when WaitAll is gathering + exceptions for tasks it waited on. If this flag gets set, the implicit wait on children + will skip exceptions to prevent duplication. + + This should only be called when this task has completed with an exception + + + + + + Signals completion of this particular task. + + The bUserDelegateExecuted parameter indicates whether this Finish() call comes following the + full execution of the user delegate. + + If bUserDelegateExecuted is false, it mean user delegate wasn't invoked at all (either due to + a cancellation request, or because this task is a promise style Task). In this case, the steps + involving child tasks (i.e. WaitForChildren) will be skipped. + + + + + + FinishStageTwo is to be executed as soon as we known there are no more children to complete. + It can happen i) either on the thread that originally executed this task (if no children were spawned, or they all completed by the time this task's delegate quit) + ii) or on the thread that executed the last child. + + + + + Final stage of the task completion code path. Notifies the parent (if any) that another of its childre are done, and runs continuations. + This function is only separated out from FinishStageTwo because these two operations are also needed to be called from CancellationCleanupLogic() + + + + + This is called by children of this task when they are completed. + + + + + This is to be called just before the task does its final state transition. + It traverses the list of exceptional children, and appends their aggregate exceptions into this one's exception list + + + + + Special purpose Finish() entry point to be used when the task delegate throws a ThreadAbortedException + This makes a note in the state flags so that we avoid any costly synchronous operations in the finish codepath + such as inlined continuations + + + Indicates whether the ThreadAbortException was added to this task's exception holder. + This should always be true except for the case of non-root self replicating task copies. + + Whether the delegate was executed. + + + + Executes the task. This method will only be called once, and handles bookeeping associated with + self-replicating tasks, in addition to performing necessary exception marshaling. + + The task has already been disposed. + + + + IThreadPoolWorkItem override, which is the entry function for this task when the TP scheduler decides to run it. + + + + + + Outermost entry function to execute this task. Handles all aspects of executing a task on the caller thread. + Currently this is called by IThreadPoolWorkItem.ExecuteWorkItem(), and TaskManager.TryExecuteInline. + + + Performs atomic updates to prevent double execution. Should only be set to true + in codepaths servicing user provided TaskSchedulers. The ConcRT or ThreadPool schedulers don't need this. + + + + The actual code which invokes the body of the task. This can be overriden in derived types. + + + + + Alternate InnerInvoke prototype to be called from ExecuteSelfReplicating() so that + the Parallel Debugger can discover the actual task being invoked. + Details: Here, InnerInvoke is actually being called on the rootTask object while we are actually executing the + childTask. And the debugger needs to discover the childTask, so we pass that down as an argument. + The NoOptimization and NoInlining flags ensure that the childTask pointer is retained, and that this + function appears on the callstack. + + + + + + Performs whatever handling is necessary for an unhandled exception. Normally + this just entails adding the exception to the holder object. + + The exception that went unhandled. + + + + Waits for the to complete execution. + + + The was canceled -or- an exception was thrown during + the execution of the . + + + The has been disposed. + + + + + Waits for the to complete execution. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + true if the completed execution within the allotted time; otherwise, false. + + + The was canceled -or- an exception was thrown during the execution of the . + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + The has been disposed. + + + + + Waits for the to complete execution. + + + A to observe while waiting for the task to complete. + + + The was canceled. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + + + Waits for the to complete execution. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + true if the completed execution within the allotted time; otherwise, + false. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + + + Waits for the to complete execution. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for the task to complete. + + + true if the completed execution within the allotted time; otherwise, false. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + The core wait function, which is only accesible internally. It's meant to be used in places in TPL code where + the current context is known or cached. + + + + + Cancels the . + + Indiactes whether we should only cancel non-invoked tasks. + For the default scheduler this option will only be serviced through TryDequeue. + For custom schedulers we also attempt an atomic state transition. + true if the task was successfully canceled; otherwise, false. + The + has been disposed. + + + + Sets the task's cancellation acknowledged flag. + + + + + Runs all of the continuations, as appropriate. + + + + + Helper function to determine whether the current task is in the state desired by the + continuation kind under evaluation. Three possibilities exist: the task failed with + an unhandled exception (OnFailed), the task was canceled before running (OnAborted), + or the task completed successfully (OnCompletedSuccessfully). Note that the last + one includes completing due to cancellation. + + The continuation options under evaluation. + True if the continuation should be run given the task's current state. + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + The that will be assigned to the new continuation task. + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Converts TaskContinuationOptions to TaskCreationOptions, and also does + some validity checking along the way. + + Incoming TaskContinuationOptions + Outgoing TaskCreationOptions + Outgoing InternalTaskOptions + + + + Registers the continuation and possibly runs it (if the task is already finished). + + The continuation task itself. + TaskScheduler with which to associate continuation task. + Restrictions on when the continuation becomes active. + + + + Waits for all of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + An array of instances on which to wait. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + A to observe while waiting for the tasks to complete. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The was canceled. + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for the tasks to complete. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + Waits for a set of handles in a STA-aware way. In other words, it will wait for each + of the events individually if we're on a STA thread, because MsgWaitForMultipleObjectsEx + can't do a true wait-all due to its hidden message queue event. This is not atomic, + of course, but we only wait on one-way (MRE) events anyway so this is OK. + + An array of wait handles to wait on. + The timeout to use during waits. + The cancellationToken that enables a wait to be canceled. + True if all waits succeeded, false if a timeout occurred. + + + + Internal WaitAll implementation which is meant to be used with small number of tasks, + optimized for Parallel.Invoke and other structured primitives. + + + + + This internal function is only meant to be called by WaitAll() + If the completed task is canceled or it has other exceptions, here we will add those + into the passed in exception list (which will be lazily initialized here). + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + The index of the completed task in the array argument. + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + A to observe while waiting for a task to complete. + + + The index of the completed task in the array argument. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + The was canceled. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for a task to complete. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + Gets a unique ID for this Task instance. + + + Task IDs are assigned on-demand and do not necessarily represent the order in the which Task + instances were created. + + + + + Returns the unique ID of the currently executing Task. + + + + + Gets the Task instance currently executing, or + null if none exists. + + + + + Gets the Exception that caused the Task to end prematurely. If the Task completed successfully or has not yet thrown any + exceptions, this will return null. + + + Tasks that throw unhandled exceptions store the resulting exception and propagate it wrapped in a + in calls to Wait + or in accesses to the property. Any exceptions not observed by the time + the Task instance is garbage collected will be propagated on the finalizer thread. + + + The Task + has been disposed. + + + + + Gets the TaskStatus of this Task. + + + + + Gets whether this Task instance has completed + execution due to being canceled. + + + A Task will complete in Canceled state either if its CancellationToken + was marked for cancellation before the task started executing, or if the task acknowledged the cancellation request on + its already signaled CancellationToken by throwing an + OperationCanceledException2 that bears the same + CancellationToken. + + + + + Returns true if this task has a cancellation token and it was signaled. + To be used internally in execute entry codepaths. + + + + + This internal property provides access to the CancellationToken that was set on the task + when it was constructed. + + + + + Gets whether this threw an OperationCanceledException2 while its CancellationToken was signaled. + + + + + Gets whether this Task has completed. + + + will return true when the Task is in one of the three + final states: RanToCompletion, + Faulted, or + Canceled. + + + + + Checks whether this task has been disposed. + + + + + Gets the TaskCreationOptions used + to create this task. + + + + + Gets a that can be used to wait for the task to + complete. + + + Using the wait functionality provided by + should be preferred over using for similar + functionality. + + + The has been disposed. + + + + + Gets the state object supplied when the Task was created, + or null if none was supplied. + + + + + Gets an indication of whether the asynchronous operation completed synchronously. + + true if the asynchronous operation completed synchronously; otherwise, false. + + + + Provides access to the TaskScheduler responsible for executing this Task. + + + + + Provides access to factory methods for creating and instances. + + + The factory returned from is a default instance + of , as would result from using + the default constructor on TaskFactory. + + + + + Provides an event that can be used to wait for completion. + Only called by Wait*(), which means that we really do need to instantiate a completion event. + + + + + Determines whether this is the root task of a self replicating group. + + + + + Determines whether the task is a replica itself. + + + + + The property formerly known as IsFaulted. + + + + + Gets whether the completed due to an unhandled exception. + + + If is true, the Task's will be equal to + TaskStatus.Faulted, and its + property will be non-null. + + + + + Checks whether the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag is set, + This will only be used by the implicit wait to prevent double throws + + + + + + Checks whether the body was ever invoked. Used by task scheduler code to verify custom schedulers actually ran the task. + + + + + A structure to hold continuation information. + + + + + Constructs a new continuation structure. + + The task to be activated. + The continuation options. + The scheduler to use for the continuation. + + + + Invokes the continuation for the target completion task. + + The completed task. + Whether the continuation can be inlined. + + + + Initializes a new with the specified function. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + + The argument is null. + + + + + Initializes a new with the specified function. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + The to be assigned to this task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified function and creation options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified function and creation options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified function and state. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the action. + + The argument is null. + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + The to be assigned to the new task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + The to be assigned to the new task. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Creates a new future object. + + The parent task for this future. + A function that yields the future value. + The task scheduler which will be used to execute the future. + The CancellationToken for the task. + Options to control the future's behavior. + Internal options to control the future's behavior. + The argument specifies + a SelfReplicating , which is illegal."/>. + + + + Creates a new future object. + + The parent task for this future. + An object containing data to be used by the action; may be null. + A function that yields the future value. + The CancellationToken for the task. + The task scheduler which will be used to execute the future. + Options to control the future's behavior. + Internal options to control the future's behavior. + The argument specifies + a SelfReplicating , which is illegal."/>. + + + + Evaluates the value selector of the Task which is passed in as an object and stores the result. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new task. + A new continuation . + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The , when executed, should return a . This task's completion state will be transferred to the task returned + from the ContinueWith call. + + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be passed as + an argument this completed task. + + The that will be assigned to the new task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The , when executed, should return a . + This task's completion state will be transferred to the task returned from the + ContinueWith call. + + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Gets the result value of this . + + + The get accessor for this property ensures that the asynchronous operation is complete before + returning. Once the result of the computation is available, it is stored and will be returned + immediately on later calls to . + + + + + Provides access to factory methods for creating instances. + + + The factory returned from is a default instance + of , as would result from using + the default constructor on the factory type. + + + + + Provides support for creating and scheduling + Task{TResult} objects. + + The type of the results that are available though + the Task{TResult} objects that are associated with + the methods in this class. + + + There are many common patterns for which tasks are relevant. The + class encodes some of these patterns into methods that pick up default settings, which are + configurable through its constructors. + + + A default instance of is available through the + Task{TResult}.Factory property. + + + + + + Initializes a instance with the default configuration. + + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the default configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The + TaskScheduler to use to schedule any tasks created with this TaskFactory{TResult}. A null value + indicates that the current TaskScheduler should be used. + + + With this constructor, the + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to , unless it's null, in which case the property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}. + + + The exception that is thrown when the + argument or the + argument specifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}. + + + The default + TaskScheduler to use to schedule any Tasks created with this TaskFactory{TResult}. A null value + indicates that TaskScheduler.Current should be used. + + + The exception that is thrown when the + argument or the + argumentspecifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to + , unless it's null, in which case the property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new task. + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The that will be assigned to the new task. + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Gets the default CancellationToken of this + TaskFactory. + + + This property returns the default that will be assigned to all + tasks created by this factory unless another CancellationToken value is explicitly specified + during the call to the factory methods. + + + + + Gets the TaskScheduler of this + TaskFactory{TResult}. + + + This property returns the default scheduler for this factory. It will be used to schedule all + tasks unless another scheduler is explicitly specified during calls to this factory's methods. + If null, TaskScheduler.Current + will be used. + + + + + Gets the TaskCreationOptions + value of this TaskFactory{TResult}. + + + This property returns the default creation options for this factory. They will be used to create all + tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Gets the TaskContinuationOptions + value of this TaskFactory{TResult}. + + + This property returns the default continuation options for this factory. They will be used to create + all continuation tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Represents the current stage in the lifecycle of a . + + + + + The task has been initialized but has not yet been scheduled. + + + + + The task is waiting to be activated and scheduled internally by the .NET Framework infrastructure. + + + + + The task has been scheduled for execution but has not yet begun executing. + + + + + The task is running but has not yet completed. + + + + + The task has finished executing and is implicitly waiting for + attached child tasks to complete. + + + + + The task completed execution successfully. + + + + + The task acknowledged cancellation by throwing an OperationCanceledException2 with its own CancellationToken + while the token was in signaled state, or the task's CancellationToken was already signaled before the + task started executing. + + + + + The task completed due to an unhandled exception. + + + + + Specifies flags that control optional behavior for the creation and execution of tasks. + + + + + Specifies that the default behavior should be used. + + + + + A hint to a TaskScheduler to schedule a + task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to + be run sooner, and tasks scheduled later will be more likely to be run later. + + + + + Specifies that a task will be a long-running, course-grained operation. It provides a hint to the + TaskScheduler that oversubscription may be + warranted. + + + + + Specifies that a task is attached to a parent in the task hierarchy. + + + + + Task creation flags which are only used internally. + + + + Specifies "No internal task options" + + + Used to filter out internal vs. public task creation options. + + + Specifies that the task will be queued by the runtime before handing it over to the user. + This flag will be used to skip the cancellationtoken registration step, which is only meant for unstarted tasks. + + + + Specifies flags that control optional behavior for the creation and execution of continuation tasks. + + + + + Default = "Continue on any, no task options, run asynchronously" + Specifies that the default behavior should be used. Continuations, by default, will + be scheduled when the antecedent task completes, regardless of the task's final TaskStatus. + + + + + A hint to a TaskScheduler to schedule a + task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to + be run sooner, and tasks scheduled later will be more likely to be run later. + + + + + Specifies that a task will be a long-running, course-grained operation. It provides + a hint to the TaskScheduler that + oversubscription may be warranted. + + + + + Specifies that a task is attached to a parent in the task hierarchy. + + + + + Specifies that the continuation task should not be scheduled if its antecedent ran to completion. + This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should not be scheduled if its antecedent threw an unhandled + exception. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should not be scheduled if its antecedent was canceled. This + option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent ran to + completion. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent threw an + unhandled exception. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent was canceled. + This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be executed synchronously. With this option + specified, the continuation will be run on the same thread that causes the antecedent task to + transition into its final state. If the antecedent is already complete when the continuation is + created, the continuation will run on the thread creating the continuation. Only very + short-running continuations should be executed synchronously. + + + + + Represents an exception used to communicate task cancellation. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + class with a specified error message and a reference to the inner exception that is the cause of + this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + + Initializes a new instance of the class + with a reference to the that has been canceled. + + A task that has been canceled. + + + + Gets the task associated with this exception. + + + It is permissible for no Task to be associated with a + , in which case + this property will return null. + + + + + Represents the producer side of a unbound to a + delegate, providing access to the consumer side through the property. + + + + It is often the case that a is desired to + represent another asynchronous operation. + TaskCompletionSource is provided for this purpose. It enables + the creation of a task that can be handed out to consumers, and those consumers can use the members + of the task as they would any other. However, unlike most tasks, the state of a task created by a + TaskCompletionSource is controlled explicitly by the methods on TaskCompletionSource. This enables the + completion of the external asynchronous operation to be propagated to the underlying Task. The + separation also ensures that consumers are not able to transition the state without access to the + corresponding TaskCompletionSource. + + + All members of are thread-safe + and may be used from multiple threads concurrently. + + + The type of the result value assocatied with this . + + + + Creates a . + + + + + Creates a + with the specified options. + + + The created + by this instance and accessible through its property + will be instantiated using the specified . + + The options to use when creating the underlying + . + + The represent options invalid for use + with a . + + + + + Creates a + with the specified state. + + The state to use as the underlying + 's AsyncState. + + + + Creates a with + the specified state and options. + + The options to use when creating the underlying + . + The state to use as the underlying + 's AsyncState. + + The represent options invalid for use + with a . + + + + + Attempts to transition the underlying + into the + Faulted + state. + + The exception to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The argument is null. + The was disposed. + + + + Attempts to transition the underlying + into the + Faulted + state. + + The collection of exceptions to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The argument is null. + There are one or more null elements in . + The collection is empty. + The was disposed. + + + + Transitions the underlying + into the + Faulted + state. + + The exception to bind to this . + The argument is null. + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + Faulted + state. + + The collection of exceptions to bind to this . + The argument is null. + There are one or more null elements in . + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Attempts to transition the underlying + into the + RanToCompletion + state. + + The result value to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + RanToCompletion + state. + + The result value to bind to this . + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + Canceled + state. + + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Attempts to transition the underlying + into the + Canceled + state. + + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Gets the created + by this . + + + This property enables a consumer access to the that is controlled by this instance. + The , , + , and + methods (and their "Try" variants) on this instance all result in the relevant state + transitions on this underlying Task. + + + + + An exception holder manages a list of exceptions for one particular task. + It offers the ability to aggregate, but more importantly, also offers intrinsic + support for propagating unhandled exceptions that are never observed. It does + this by aggregating and throwing if the holder is ever GC'd without the holder's + contents ever having been requested (e.g. by a Task.Wait, Task.get_Exception, etc). + + + + + Creates a new holder; it will be registered for finalization. + + The task this holder belongs to. + + + + A finalizer that repropagates unhandled exceptions. + + + + + Add an exception to the internal list. This will ensure the holder is + in the proper state (handled/unhandled) depending on the list's contents. + + An exception object (either an Exception or an + IEnumerable{Exception}) to add to the list. + + + + A private helper method that ensures the holder is considered + unhandled, i.e. it is registered for finalization. + + + + + A private helper method that ensures the holder is considered + handled, i.e. it is not registered for finalization. + + Whether this is called from the finalizer thread. + + + + Allocates a new aggregate exception and adds the contents of the list to + it. By calling this method, the holder assumes exceptions to have been + "observed", such that the finalization check will be subsequently skipped. + + Whether this is being called from a finalizer. + An extra exception to be included (optionally). + The aggregate exception to throw. + + + + Provides a set of static (Shared in Visual Basic) methods for working with specific kinds of + instances. + + + + + Creates a proxy Task that represents the + asynchronous operation of a Task{Task}. + + + It is often useful to be able to return a Task from a + Task{TResult}, where the inner Task represents work done as part of the outer Task{TResult}. However, + doing so results in a Task{Task}, which, if not dealt with carefully, could produce unexpected behavior. Unwrap + solves this problem by creating a proxy Task that represents the entire asynchronous operation of such a Task{Task}. + + The Task{Task} to unwrap. + The exception that is thrown if the + argument is null. + A Task that represents the asynchronous operation of the provided Task{Task}. + + + + Creates a proxy Task{TResult} that represents the + asynchronous operation of a Task{Task{TResult}}. + + + It is often useful to be able to return a Task{TResult} from a Task{TResult}, where the inner Task{TResult} + represents work done as part of the outer Task{TResult}. However, doing so results in a Task{Task{TResult}}, + which, if not dealt with carefully, could produce unexpected behavior. Unwrap solves this problem by + creating a proxy Task{TResult} that represents the entire asynchronous operation of such a Task{Task{TResult}}. + + The Task{Task{TResult}} to unwrap. + The exception that is thrown if the + argument is null. + A Task{TResult} that represents the asynchronous operation of the provided Task{Task{TResult}}. /// Unwraps a Task that returns another Task. + + + + Provides support for creating and scheduling + Tasks. + + + + There are many common patterns for which tasks are relevant. The + class encodes some of these patterns into methods that pick up default settings, which are + configurable through its constructors. + + + A default instance of is available through the + Task.Factory property. + + + + + + Initializes a instance with the default configuration. + + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The + TaskScheduler to use to schedule any tasks created with this TaskFactory. A null value + indicates that the current TaskScheduler should be used. + + + With this constructor, the + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to , unless it's null, in which case the property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory. + + + The exception that is thrown when the + argument or the + argument specifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory. + + + The default + TaskScheduler to use to schedule any Tasks created with this TaskFactory. A null value + indicates that TaskScheduler.Current should be used. + + + The exception that is thrown when the + argument or the + argumentspecifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to + , unless it's null, in which case the property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The started Task. + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors + and then calling + Start to schedule it for execution. However, + unless creation and scheduling must be separated, StartNew is the recommended + approach for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The that will be assigned to the new task. + The started Task. + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors + and then calling + Start to schedule it for execution. However, + unless creation and scheduling must be separated, StartNew is the recommended + approach for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The that will be assigned to the new + A TaskCreationOptions value that controls the behavior of the + created + Task. + The TaskScheduler + that is used to schedule the created Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The started Task. + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The that will be assigned to the new + The started Task. + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The TaskScheduler + that is used to schedule the created Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the asynchronous + operation. + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the asynchronous + operation. + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the asynchronous + operation. + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Check validity of options passed to FromAsync method + + The options to be validated. + determines type of FromAsync method that called this method + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Gets the default CancellationToken of this + TaskFactory. + + + This property returns the default that will be assigned to all + tasks created by this factory unless another CancellationToken value is explicitly specified + during the call to the factory methods. + + + + + Gets the TaskScheduler of this + TaskFactory. + + + This property returns the default scheduler for this factory. It will be used to schedule all + tasks unless another scheduler is explicitly specified during calls to this factory's methods. + If null, TaskScheduler.Current + will be used. + + + + + Gets the TaskCreationOptions + value of this TaskFactory. + + + This property returns the default creation options for this factory. They will be used to create all + tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Gets the TaskContinuationOptions + value of this TaskFactory. + + + This property returns the default continuation options for this factory. They will be used to create + all continuation tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Represents an abstract scheduler for tasks. + + + + TaskScheduler acts as the extension point for all + pluggable scheduling logic. This includes mechanisms such as how to schedule a task for execution, and + how scheduled tasks should be exposed to debuggers. + + + All members of the abstract type are thread-safe + and may be used from multiple threads concurrently. + + + + + + Queues a Task to the scheduler. + + + + A class derived from TaskScheduler + implements this method to accept tasks being scheduled on the scheduler. + A typical implementation would store the task in an internal data structure, which would + be serviced by threads that would execute those tasks at some time in the future. + + + This method is only meant to be called by the .NET Framework and + should not be called directly by the derived class. This is necessary + for maintaining the consistency of the system. + + + The Task to be queued. + The argument is null. + + + + Determines whether the provided Task + can be executed synchronously in this call, and if it can, executes it. + + + + A class derived from TaskScheduler implements this function to + support inline execution of a task on a thread that initiates a wait on that task object. Inline + execution is optional, and the request may be rejected by returning false. However, better + scalability typically results the more tasks that can be inlined, and in fact a scheduler that + inlines too little may be prone to deadlocks. A proper implementation should ensure that a + request executing under the policies guaranteed by the scheduler can successfully inline. For + example, if a scheduler uses a dedicated thread to execute tasks, any inlining requests from that + thread should succeed. + + + If a scheduler decides to perform the inline execution, it should do so by calling to the base + TaskScheduler's + TryExecuteTask method with the provided task object, propagating + the return value. It may also be appropriate for the scheduler to remove an inlined task from its + internal data structures if it decides to honor the inlining request. Note, however, that under + some circumstances a scheduler may be asked to inline a task that was not previously provided to + it with the method. + + + The derived scheduler is responsible for making sure that the calling thread is suitable for + executing the given task as far as its own scheduling and execution policies are concerned. + + + The Task to be + executed. + A Boolean denoting whether or not task has previously been + queued. If this parameter is True, then the task may have been previously queued (scheduled); if + False, then the task is known not to have been queued, and this call is being made in order to + execute the task inline without queueing it. + A Boolean value indicating whether the task was executed inline. + The argument is + null. + The was already + executed. + + + + Generates an enumerable of Task instances + currently queued to the scheduler waiting to be executed. + + + + A class derived from implements this method in order to support + integration with debuggers. This method will only be invoked by the .NET Framework when the + debugger requests access to the data. The enumerable returned will be traversed by debugging + utilities to access the tasks currently queued to this scheduler, enabling the debugger to + provide a representation of this information in the user interface. + + + It is important to note that, when this method is called, all other threads in the process will + be frozen. Therefore, it's important to avoid synchronization with other threads that may lead to + blocking. If synchronization is necessary, the method should prefer to throw a + than to block, which could cause a debugger to experience delays. Additionally, this method and + the enumerable returned must not modify any globally visible state. + + + The returned enumerable should never be null. If there are currently no queued tasks, an empty + enumerable should be returned instead. + + + For developers implementing a custom debugger, this method shouldn't be called directly, but + rather this functionality should be accessed through the internal wrapper method + GetScheduledTasksForDebugger: + internal Task[] GetScheduledTasksForDebugger(). This method returns an array of tasks, + rather than an enumerable. In order to retrieve a list of active schedulers, a debugger may use + another internal method: internal static TaskScheduler[] GetTaskSchedulersForDebugger(). + This static method returns an array of all active TaskScheduler instances. + GetScheduledTasksForDebugger then may be used on each of these scheduler instances to retrieve + the list of scheduled tasks for each. + + + An enumerable that allows traversal of tasks currently queued to this scheduler. + + + This scheduler is unable to generate a list of queued tasks at this time. + + + + + Retrieves some thread static state that can be cached and passed to multiple + TryRunInline calls, avoiding superflous TLS fetches. + + A bag of TLS state (or null if none exists). + + + + Attempts to execute the target task synchronously. + + The task to run. + True if the task may have been previously queued, + false if the task was absolutely not previously queued. + The state retrieved from GetThreadStatics + True if it ran, false otherwise. + + + + Attempts to dequeue a Task that was previously queued to + this scheduler. + + The Task to be dequeued. + A Boolean denoting whether the argument was successfully dequeued. + The argument is null. + + + + Notifies the scheduler that a work item has made progress. + + + + + Initializes the . + + + + + Frees all resources associated with this scheduler. + + + + + Creates a + associated with the current . + + + All Task instances queued to + the returned scheduler will be executed through a call to the + Post method + on that context. + + + A associated with + the current SynchronizationContext, as + determined by SynchronizationContext.Current. + + + The current SynchronizationContext may not be used as a TaskScheduler. + + + + + Attempts to execute the provided Task + on this scheduler. + + + + Scheduler implementations are provided with Task + instances to be executed through either the method or the + method. When the scheduler deems it appropriate to run the + provided task, should be used to do so. TryExecuteTask handles all + aspects of executing a task, including action invocation, exception handling, state management, + and lifecycle control. + + + must only be used for tasks provided to this scheduler by the .NET + Framework infrastructure. It should not be used to execute arbitrary tasks obtained through + custom mechanisms. + + + + A Task object to be executed. + + The is not associated with this scheduler. + + A Boolean that is true if was successfully executed, false if it + was not. A common reason for execution failure is that the task had previously been executed or + is in the process of being executed by another thread. + + + + Provides an array of all queued Task instances + for the debugger. + + + The returned array is populated through a call to . + Note that this function is only meant to be invoked by a debugger remotely. + It should not be called by any other codepaths. + + An array of Task instances. + + This scheduler is unable to generate a list of queued tasks at this time. + + + + + Provides an array of all active TaskScheduler + instances for the debugger. + + + This function is only meant to be invoked by a debugger remotely. + It should not be called by any other codepaths. + + An array of TaskScheduler instances. + + + + Registers a new TaskScheduler instance in the global collection of schedulers. + + + + + Removes a TaskScheduler instance from the global collection of schedulers. + + + + + Indicates the maximum concurrency level this + is able to support. + + + + + Indicates whether this is a custom scheduler, in which case the safe code paths will be taken upon task entry + using a CAS to transition from queued state to executing. + + + + + Gets the default TaskScheduler instance. + + + + + Gets the TaskScheduler + associated with the currently executing task. + + + When not called from within a task, will return the scheduler. + + + + + Gets the unique ID for this . + + + + + Occurs when a faulted 's unobserved exception is about to trigger exception escalation + policy, which, by default, would terminate the process. + + + This AppDomain-wide event provides a mechanism to prevent exception + escalation policy (which, by default, terminates the process) from triggering. + Each handler is passed a + instance, which may be used to examine the exception and to mark it as observed. + + + + + Nested class that provides debugger view for TaskScheduler + + + + Default thread pool scheduler. + + + + A TaskScheduler implementation that executes all tasks queued to it through a call to + on the + that its associated with. The default constructor for this class binds to the current + + + + + Constructs a SynchronizationContextTaskScheduler associated with + + This constructor expects to be set. + + + + Implemetation of for this scheduler class. + + Simply posts the tasks to be executed on the associated . + + + + + + Implementation of for this scheduler class. + + The task will be executed inline only if the call happens within + the associated . + + + + + + + Implementes the property for + this scheduler class. + + By default it returns 1, because a based + scheduler only supports execution on a single thread. + + + + + Provides data for the event that is raised when a faulted 's + exception goes unobserved. + + + The Exception property is used to examine the exception without marking it + as observed, whereas the method is used to mark the exception + as observed. Marking the exception as observed prevents it from triggering exception escalation policy + which, by default, terminates the process. + + + + + Initializes a new instance of the class + with the unobserved exception. + + The Exception that has gone unobserved. + + + + Marks the as "observed," thus preventing it + from triggering exception escalation policy which, by default, terminates the process. + + + + + Gets whether this exception has been marked as "observed." + + + + + The Exception that went unobserved. + + + + + Represents an exception used to communicate an invalid operation by a + . + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + class using the default error message and a reference to the inner exception that is the cause of + this exception. + + The exception that is the cause of the current exception. + + + + Initializes a new instance of the + class with a specified error message and a reference to the inner exception that is the cause of + this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/ensureRedirect.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp71/ensureRedirect.xml new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Runtime.dll b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Runtime.dll new file mode 100644 index 0000000..fa831ad Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Runtime.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Runtime.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Runtime.xml new file mode 100644 index 0000000..93cb00d --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Runtime.xml @@ -0,0 +1,56 @@ + + + + System.Runtime + + + + Defines a provider for progress updates. + The type of progress update value. + + + Reports a progress update. + The value of the updated progress. + + + Identities the async state machine type for this method. + + + Identities the state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + Gets the type that implements the state machine. + + + Initializes the attribute. + The type that implements the state machine. + + + + Allows you to obtain the method or property name of the caller to the method. + + + + + Allows you to obtain the line number in the source file at which the method is called. + + + + + Allows you to obtain the full path of the source file that contains the caller. + This is the file path at the time of compile. + + + + Identities the iterator state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Threading.Tasks.dll b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Threading.Tasks.dll new file mode 100644 index 0000000..74f5e2c Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Threading.Tasks.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Threading.Tasks.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Threading.Tasks.xml new file mode 100644 index 0000000..6c77012 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/System.Threading.Tasks.xml @@ -0,0 +1,8969 @@ + + + + System.Threading.Tasks + + + + Represents one or more errors that occur during application execution. + + is used to consolidate multiple failures into a single, throwable + exception object. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error + message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + The argument + is null. + + + + Initializes a new instance of the class with + references to the inner exceptions that are the cause of this exception. + + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with + references to the inner exceptions that are the cause of this exception. + + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with a specified error + message and references to the inner exceptions that are the cause of this exception. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with a specified error + message and references to the inner exceptions that are the cause of this exception. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Allocates a new aggregate exception with the specified message and list of inner exceptions. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Returns the that is the root cause of this exception. + + + + + Invokes a handler on each contained by this . + + The predicate to execute for each exception. The predicate accepts as an + argument the to be processed and returns a Boolean to indicate + whether the exception was handled. + + Each invocation of the returns true or false to indicate whether the + was handled. After all invocations, if any exceptions went + unhandled, all unhandled exceptions will be put into a new + which will be thrown. Otherwise, the method simply returns. If any + invocations of the throws an exception, it will halt the processing + of any more exceptions and immediately propagate the thrown exception as-is. + + An exception contained by this was not handled. + The argument is + null. + + + + Flattens an instances into a single, new instance. + + A new, flattened . + + If any inner exceptions are themselves instances of + , this method will recursively flatten all of them. The + inner exceptions returned in the new + will be the union of all of the the inner exceptions from exception tree rooted at the provided + instance. + + + + + Creates and returns a string representation of the current . + + A string representation of the current exception. + + + + Gets a read-only collection of the instances that caused the + current exception. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to One or more errors occurred.. + + + + + Looks up a localized string similar to An element of innerExceptions was null.. + + + + + Looks up a localized string similar to {0}{1}---> (Inner Exception #{2}) {3}{4}{5}. + + + + + Looks up a localized string similar to No tokens were supplied.. + + + + + Looks up a localized string similar to The CancellationTokenSource associated with this CancellationToken has been disposed.. + + + + + Looks up a localized string similar to The CancellationTokenSource has been disposed.. + + + + + Looks up a localized string similar to The SyncRoot property may not be used for the synchronization of concurrent collections.. + + + + + Looks up a localized string similar to The array is multidimensional, or the type parameter for the set cannot be cast automatically to the type of the destination array.. + + + + + Looks up a localized string similar to The index is equal to or greater than the length of the array, or the number of elements in the dictionary is greater than the available space from index to the end of the destination array.. + + + + + Looks up a localized string similar to The capacity argument must be greater than or equal to zero.. + + + + + Looks up a localized string similar to The concurrencyLevel argument must be positive.. + + + + + Looks up a localized string similar to The index argument is less than zero.. + + + + + Looks up a localized string similar to TKey is a reference type and item.Key is null.. + + + + + Looks up a localized string similar to The key already existed in the dictionary.. + + + + + Looks up a localized string similar to The source argument contains duplicate keys.. + + + + + Looks up a localized string similar to The key was of an incorrect type for this dictionary.. + + + + + Looks up a localized string similar to The value was of an incorrect type for this dictionary.. + + + + + Looks up a localized string similar to The lazily-initialized type does not have a public, parameterless constructor.. + + + + + Looks up a localized string similar to ValueFactory returned null.. + + + + + Looks up a localized string similar to The spinCount argument must be in the range 0 to {0}, inclusive.. + + + + + Looks up a localized string similar to There are too many threads currently waiting on the event. A maximum of {0} waiting threads are supported.. + + + + + Looks up a localized string similar to The event has been disposed.. + + + + + Looks up a localized string similar to The operation was canceled.. + + + + + Looks up a localized string similar to The condition argument is null.. + + + + + Looks up a localized string similar to The timeout must represent a value between -1 and Int32.MaxValue, inclusive.. + + + + + Looks up a localized string similar to The specified TaskContinuationOptions combined LongRunning and ExecuteSynchronously. Synchronous continuations should not be long running.. + + + + + Looks up a localized string similar to The specified TaskContinuationOptions excluded all continuation kinds.. + + + + + Looks up a localized string similar to (Internal)An attempt was made to create a LongRunning SelfReplicating task.. + + + + + Looks up a localized string similar to The value needs to translate in milliseconds to -1 (signifying an infinite timeout), 0 or a positive integer less than or equal to Int32.MaxValue.. + + + + + Looks up a localized string similar to The value needs to be either -1 (signifying an infinite timeout), 0 or a positive integer.. + + + + + Looks up a localized string similar to A task may only be disposed if it is in a completion state (RanToCompletion, Faulted or Canceled).. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.LongRunning in calls to FromAsync.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.PreferFairness in calls to FromAsync.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.SelfReplicating in calls to FromAsync.. + + + + + Looks up a localized string similar to FromAsync was called with a TaskManager that had already shut down.. + + + + + Looks up a localized string similar to The tasks argument contains no tasks.. + + + + + Looks up a localized string similar to It is invalid to exclude specific continuation kinds for continuations off of multiple tasks.. + + + + + Looks up a localized string similar to The tasks argument included a null value.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task that was already started.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a continuation task.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task not bound to a delegate, such as the task returned from an asynchronous method.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task that has already completed.. + + + + + Looks up a localized string similar to Start may not be called on a task that was already started.. + + + + + Looks up a localized string similar to Start may not be called on a continuation task.. + + + + + Looks up a localized string similar to Start may not be called on a task with null action.. + + + + + Looks up a localized string similar to Start may not be called on a promise-style task.. + + + + + Looks up a localized string similar to Start may not be called on a task that has completed.. + + + + + Looks up a localized string similar to The task has been disposed.. + + + + + Looks up a localized string similar to The tasks array included at least one null element.. + + + + + Looks up a localized string similar to The awaited task has not yet completed.. + + + + + Looks up a localized string similar to A task was canceled.. + + + + + Looks up a localized string similar to The exceptions collection was empty.. + + + + + Looks up a localized string similar to The exceptions collection included at least one null element.. + + + + + Looks up a localized string similar to A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread.. + + + + + Looks up a localized string similar to (Internal)Expected an Exception or an IEnumerable<Exception>. + + + + + Looks up a localized string similar to ExecuteTask may not be called for a task which was already executed.. + + + + + Looks up a localized string similar to ExecuteTask may not be called for a task which was previously queued to a different TaskScheduler.. + + + + + Looks up a localized string similar to The current SynchronizationContext may not be used as a TaskScheduler.. + + + + + Looks up a localized string similar to The TryExecuteTaskInline call to the underlying scheduler succeeded, but the task body was not invoked.. + + + + + Looks up a localized string similar to An exception was thrown by a TaskScheduler.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.SelfReplicating for a Task<TResult>.. + + + + + Looks up a localized string similar to {Not yet computed}. + + + + + Looks up a localized string similar to A task's Exception may only be set directly if the task was created without a function.. + + + + + Looks up a localized string similar to An attempt was made to transition a task to a final state when it had already completed.. + + + + + Represents a thread-safe collection of keys and values. + + The type of the keys in the dictionary. + The type of the values in the dictionary. + + All public and protected members of are thread-safe and may be used + concurrently from multiple threads. + + + + + Initializes a new instance of the + class that is empty, has the default concurrency level, has the default initial capacity, and + uses the default comparer for the key type. + + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level and capacity, and uses the default + comparer for the key type. + + The estimated number of threads that will update the + concurrently. + The initial number of elements that the + can contain. + is + less than 1. + is less than + 0. + + + + Initializes a new instance of the + class that contains elements copied from the specified , has the default concurrency + level, has the default initial capacity, and uses the default comparer for the key type. + + The whose elements are copied to + the new + . + is a null reference + (Nothing in Visual Basic). + contains one or more + duplicate keys. + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level and capacity, and uses the specified + . + + The + implementation to use when comparing keys. + is a null reference + (Nothing in Visual Basic). + + + + Initializes a new instance of the + class that contains elements copied from the specified , has the default concurrency level, has the default + initial capacity, and uses the specified + . + + The whose elements are copied to + the new + . + The + implementation to use when comparing keys. + is a null reference + (Nothing in Visual Basic). -or- + is a null reference (Nothing in Visual Basic). + + + + + Initializes a new instance of the + class that contains elements copied from the specified , + has the specified concurrency level, has the specified initial capacity, and uses the specified + . + + The estimated number of threads that will update the + concurrently. + The whose elements are copied to the new + . + The implementation to use + when comparing keys. + + is a null reference (Nothing in Visual Basic). + -or- + is a null reference (Nothing in Visual Basic). + + + is less than 1. + + contains one or more duplicate keys. + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level, has the specified initial capacity, and + uses the specified . + + The estimated number of threads that will update the + concurrently. + The initial number of elements that the + can contain. + The + implementation to use when comparing keys. + + is less than 1. -or- + is less than 0. + + is a null reference + (Nothing in Visual Basic). + + + + Attempts to add the specified key and value to the . + + The key of the element to add. + The value of the element to add. The value can be a null reference (Nothing + in Visual Basic) for reference types. + true if the key/value pair was added to the + successfully; otherwise, false. + is null reference + (Nothing in Visual Basic). + The + contains too many elements. + + + + Determines whether the contains the specified + key. + + The key to locate in the . + true if the contains an element with + the specified key; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Attempts to remove and return the the value with the specified key from the + . + + The key of the element to remove and return. + When this method returns, contains the object removed from the + or the default value of + if the operation failed. + true if an object was removed successfully; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Removes the specified key from the dictionary if it exists and returns its associated value. + If matchValue flag is set, the key will be removed only if is associated with a particular + value. + + The key to search for and remove if it exists. + The variable into which the removed value, if found, is stored. + Whether removal of the key is conditional on its value. + The conditional value to compare against if is true + + + + + Attempts to get the value associated with the specified key from the . + + The key of the value to get. + When this method returns, contains the object from + the + with the spedified key or the default value of + , if the operation failed. + true if the key was found in the ; + otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Compares the existing value for the specified key with a specified value, and if they’re equal, + updates the key with a third value. + + The key whose value is compared with and + possibly replaced. + The value that replaces the value of the element with if the comparison results in equality. + The value that is compared to the value of the element with + . + true if the value with was equal to and replaced with ; otherwise, + false. + is a null + reference. + + + + Removes all keys and values from the . + + + + + Copies the elements of the to an array of + type , starting at the + specified array index. + + The one-dimensional array of type + that is the destination of the elements copied from the . The array must have zero-based indexing. + The zero-based index in at which copying + begins. + is a null reference + (Nothing in Visual Basic). + is less than + 0. + is equal to or greater than + the length of the . -or- The number of elements in the source + is greater than the available space from to the end of the destination + . + + + + Copies the key and value pairs stored in the to a + new array. + + A new array containing a snapshot of key and value pairs copied from the . + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToPairs. + + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToEntries. + + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToObjects. + + + + Returns an enumerator that iterates through the . + An enumerator for the . + + The enumerator returned from the dictionary is safe to use concurrently with + reads and writes to the dictionary, however it does not represent a moment-in-time snapshot + of the dictionary. The contents exposed through the enumerator may contain modifications + made to the dictionary after was called. + + + + + Shared internal implementation for inserts and updates. + If key exists, we always return false; and if updateIfExists == true we force update with value; + If key doesn't exist, we always add value and return true; + + + + + Adds a key/value pair to the + if the key does not already exist. + + The key of the element to add. + The function used to generate a value for the key + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The value for the key. This will be either the existing value for the key if the + key is already in the dictionary, or the new value for the key as returned by valueFactory + if the key was not in the dictionary. + + + + Adds a key/value pair to the + if the key does not already exist. + + The key of the element to add. + the value to be added, if the key does not already exist + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The value for the key. This will be either the existing value for the key if the + key is already in the dictionary, or the new value if the key was not in the dictionary. + + + + Adds a key/value pair to the if the key does not already + exist, or updates a key/value pair in the if the key + already exists. + + The key to be added or whose value should be updated + The function used to generate a value for an absent key + The function used to generate a new value for an existing key + based on the key's existing value + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The new value for the key. This will be either be the result of addValueFactory (if the key was + absent) or the result of updateValueFactory (if the key was present). + + + + Adds a key/value pair to the if the key does not already + exist, or updates a key/value pair in the if the key + already exists. + + The key to be added or whose value should be updated + The value to be added for an absent key + The function used to generate a new value for an existing key based on + the key's existing value + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The new value for the key. This will be either be the result of addValueFactory (if the key was + absent) or the result of updateValueFactory (if the key was present). + + + + Adds the specified key and value to the . + + The object to use as the key of the element to add. + The object to use as the value of the element to add. + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + + An element with the same key already exists in the . + + + + Removes the element with the specified key from the . + + The key of the element to remove. + true if the element is successfully remove; otherwise false. This method also returns + false if + was not found in the original . + + is a null reference + (Nothing in Visual Basic). + + + + Adds the specified value to the + with the specified key. + + The + structure representing the key and value to add to the . + The of is null. + The + contains too many elements. + An element with the same key already exists in the + + + + + Determines whether the + contains a specific key and value. + + The + structure to locate in the . + true if the is found in the ; otherwise, false. + + + + Removes a key and value from the dictionary. + + The + structure representing the key and value to remove from the . + true if the key and value represented by is successfully + found and removed; otherwise, false. + The Key property of is a null reference (Nothing in Visual Basic). + + + Returns an enumerator that iterates through the . + An enumerator for the . + + The enumerator returned from the dictionary is safe to use concurrently with + reads and writes to the dictionary, however it does not represent a moment-in-time snapshot + of the dictionary. The contents exposed through the enumerator may contain modifications + made to the dictionary after was called. + + + + + Adds the specified key and value to the dictionary. + + The object to use as the key. + The object to use as the value. + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + + is of a type that is not assignable to the key type of the . -or- + is of a type that is not assignable to , + the type of values in the . + -or- A value with the same key already exists in the . + + + + + Gets whether the contains an + element with the specified key. + + The key to locate in the . + true if the contains + an element with the specified key; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + Provides an for the + . + An for the . + + + + Removes the element with the specified key from the . + + The key of the element to remove. + is a null reference + (Nothing in Visual Basic). + + + + Copies the elements of the to an array, starting + at the specified array index. + + The one-dimensional array that is the destination of the elements copied from + the . The array must have zero-based + indexing. + The zero-based index in at which copying + begins. + is a null reference + (Nothing in Visual Basic). + is less than + 0. + is equal to or greater than + the length of the . -or- The number of elements in the source + is greater than the available space from to the end of the destination + . + + + + Replaces the internal table with a larger one. To prevent multiple threads from resizing the + table as a result of races, the table of buckets that was deemed too small is passed in as + an argument to GrowTable(). GrowTable() obtains a lock, and then checks whether the bucket + table has been replaced in the meantime or not. + + Reference to the bucket table that was deemed too small. + + + + Computes the bucket and lock number for a particular key. + + + + + Acquires all locks for this hash table, and increments locksAcquired by the number + of locks that were successfully acquired. The locks are acquired in an increasing + order. + + + + + Acquires a contiguous range of locks for this hash table, and increments locksAcquired + by the number of locks that were successfully acquired. The locks are acquired in an + increasing order. + + + + + Releases a contiguous range of locks. + + + + + Gets a collection containing the keys in the dictionary. + + + + + Gets a collection containing the values in the dictionary. + + + + + A helper method for asserts. + + + + + Get the data array to be serialized + + + + + Construct the dictionary from a previously seiralized one + + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key. If the specified key is not found, a get + operation throws a + , and a set operation creates a new + element with the specified key. + is a null reference + (Nothing in Visual Basic). + The property is retrieved and + + does not exist in the collection. + + + + Gets the number of key/value pairs contained in the . + + The dictionary contains too many + elements. + The number of key/value paris contained in the . + Count has snapshot semantics and represents the number of items in the + at the moment when Count was accessed. + + + + Gets a value that indicates whether the is empty. + + true if the is empty; otherwise, + false. + + + + Gets a collection containing the keys in the . + + An containing the keys in the + . + + + + Gets a collection containing the values in the . + + An containing the values in + the + . + + + + Gets a value indicating whether the dictionary is read-only. + + true if the is + read-only; otherwise, false. For , this property always returns + false. + + + + Gets a value indicating whether the has a fixed size. + + true if the has a + fixed size; otherwise, false. For , this property always + returns false. + + + + Gets a value indicating whether the is read-only. + + true if the is + read-only; otherwise, false. For , this property always + returns false. + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + + Gets an containing the values in the . + + An containing the values in the . + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key, or a null reference (Nothing in Visual Basic) + if is not in the dictionary or is of a type that is + not assignable to the key type of the . + is a null reference + (Nothing in Visual Basic). + + A value is being assigned, and is of a type that is not assignable to the + key type of the . -or- A value is being + assigned, and is of a type that is not assignable to the value type + of the + + + + + Gets a value indicating whether access to the is + synchronized with the SyncRoot. + + true if access to the is synchronized + (thread safe); otherwise, false. For , this property always + returns false. + + + + Gets an object that can be used to synchronize access to the . This property is not supported. + + The SyncRoot property is not supported. + + + + The number of concurrent writes for which to optimize by default. + + + + + A node in a singly-linked list representing a particular hash table bucket. + + + + + A private class to represent enumeration over the dictionary that implements the + IDictionaryEnumerator interface. + + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + Represents an asynchronous method builder. + + + A cached VoidTaskResult task used for builders that complete synchronously. + + + The generic builder object to which this non-generic instance delegates. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state. + + The builder is not initialized. + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + + Gets the for this builder. + The representing the builder's asynchronous operation. + The builder is not initialized. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + Holds state related to the builder's IAsyncStateMachine. + This is a mutable struct. Be very delicate with it. + + + A reference to the heap-allocated state machine object associated with this builder. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument is null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + + Gets the Action to use with an awaiter's OnCompleted or UnsafeOnCompleted method. + On first invocation, the supplied state machine will be boxed. + + Specifies the type of the method builder used. + Specifies the type of the state machine used. + The builder. + The state machine. + An Action to provide to the awaiter. + + + Provides the ability to invoke a state machine's MoveNext method under a supplied ExecutionContext. + + + The context with which to run MoveNext. + + + The state machine whose MoveNext method should be invoked. + + + Initializes the runner. + The context with which to run MoveNext. + + + Invokes MoveNext under the provided context. + + + Cached delegate used with ExecutionContext.Run. + + + Invokes the MoveNext method on the supplied IAsyncStateMachine. + The IAsyncStateMachine machine instance. + + + + Provides a builder for asynchronous methods that return void. + This type is intended for compiler use only. + + + + The synchronization context associated with this operation. + + + State related to the IAsyncStateMachine. + + + An object used by the debugger to uniquely identify this builder. Lazily initialized. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Registers with UnobservedTaskException to suppress exception crashing. + + + Non-zero if PreventUnobservedTaskExceptions has already been invoked. + + + Initializes a new . + The initialized . + + + Initializes the . + The synchronizationContext associated with this operation. This may be null. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument was null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + Completes the method builder successfully. + + + Faults the method builder with an exception. + The exception that is the cause of this fault. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + + + Notifies the current synchronization context that the operation completed. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger and only in a single-threaded manner. + + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder{TResult} is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + A cached task for default(TResult). + + + State related to the IAsyncStateMachine. + + + The lazily-initialized task. + Must be named m_task for debugger step-over to work correctly. + + + The lazily-initialized task completion source. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state with the specified result. + + The result to use to complete the task. + The task has already completed. + + + + Completes the builder by using either the supplied completed task, or by completing + the builder's previously accessed task using default(TResult). + + A task already completed with the value default(TResult). + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + This should only be invoked from within an asynchronous method, + and only by the debugger. + + + + + Gets a task for the specified result. This will either + be a cached or new task, never null. + + The result for which we need a task. + The completed task containing the result. + + + Gets the lazily-initialized TaskCompletionSource. + + + Gets the for this builder. + The representing the builder's asynchronous operation. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + Provides a base class used to cache tasks of a specific return type. + Specifies the type of results the cached tasks return. + + + + A singleton cache for this result type. + This may be null if there are no cached tasks for this TResult. + + + + Creates a non-disposable task. + The result for the task. + The cacheable task. + + + Creates a cache. + A task cache for this result type. + + + Gets a cached task if one exists. + The result for which we want a cached task. + A cached task if one exists; otherwise, null. + + + Provides a cache for Boolean tasks. + + + A true task. + + + A false task. + + + Gets a cached task for the Boolean result. + true or false + A cached task for the Boolean result. + + + Provides a cache for zero Int32 tasks. + + + The minimum value, inclusive, for which we want a cached task. + + + The maximum value, exclusive, for which we want a cached task. + + + The cache of Task{Int32}. + + + Creates an array of cached tasks for the values in the range [INCLUSIVE_MIN,EXCLUSIVE_MAX). + + + Gets a cached task for the zero Int32 result. + The integer value + A cached task for the Int32 result or null if not cached. + + + + Represents state machines generated for asynchronous methods. + This type is intended for compiler use only. + + + + Moves the state machine to its next state. + + + Configures the state machine with a heap-allocated replica. + The heap-allocated replica. + + + + Represents an awaiter used to schedule continuations when an await operation completes. + + + + + Represents an operation that will schedule continuations when the operation completes. + + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + Unlike OnCompleted, UnsafeOnCompleted need not propagate ExecutionContext information. + + + Used with Task(of void) + + + + An interface similar to the one added in .NET 4.0. + + + + The exception that is thrown in a thread upon cancellation of an operation that the thread was executing. + + + Initializes the exception. + + + Initializes the exception. + The error message that explains the reason for the exception. + + + Initializes the exception. + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + Initializes the exception. + A cancellation token associated with the operation that was canceled. + + + Initializes the exception. + The error message that explains the reason for the exception. + A cancellation token associated with the operation that was canceled. + + + Initializes the exception. + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + A cancellation token associated with the operation that was canceled. + + + Gets a token associated with the operation that was canceled. + + + + A dummy replacement for the .NET internal class StackCrawlMark. + + + + + Propogates notification that operations should be canceled. + + + + A may be created directly in an unchangeable canceled or non-canceled state + using the CancellationToken's constructors. However, to have a CancellationToken that can change + from a non-canceled to a canceled state, + CancellationTokenSource must be used. + CancellationTokenSource exposes the associated CancellationToken that may be canceled by the source through its + Token property. + + + Once canceled, a token may not transition to a non-canceled state, and a token whose + is false will never change to one that can be canceled. + + + All members of this struct are thread-safe and may be used concurrently from multiple threads. + + + + + + Internal constructor only a CancellationTokenSource should create a CancellationToken + + + + + Initializes the CancellationToken. + + + The canceled state for the token. + + + Tokens created with this constructor will remain in the canceled state specified + by the parameter. If is false, + both and will be false. + If is true, + both and will be true. + + + + + Registers a delegate that will be called when this CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + A Boolean value that indicates whether to capture + the current SynchronizationContext and use it + when invoking the . + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The state to pass to the when the delegate is invoked. This may be null. + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The state to pass to the when the delegate is invoked. This may be null. + A Boolean value that indicates whether to capture + the current SynchronizationContext and use it + when invoking the . + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Determines whether the current CancellationToken instance is equal to the + specified token. + + The other CancellationToken to which to compare this + instance. + True if the instances are equal; otherwise, false. Two tokens are equal if they are associated + with the same CancellationTokenSource or if they were both constructed + from public CancellationToken constructors and their values are equal. + + + + Determines whether the current CancellationToken instance is equal to the + specified . + + The other object to which to compare this instance. + True if is a CancellationToken + and if the two instances are equal; otherwise, false. Two tokens are equal if they are associated + with the same CancellationTokenSource or if they were both constructed + from public CancellationToken constructors and their values are equal. + An associated CancellationTokenSource has been disposed. + + + + Serves as a hash function for a CancellationToken. + + A hash code for the current CancellationToken instance. + + + + Determines whether two CancellationToken instances are equal. + + The first instance. + The second instance. + True if the instances are equal; otherwise, false. + An associated CancellationTokenSource has been disposed. + + + + Determines whether two CancellationToken instances are not equal. + + The first instance. + The second instance. + True if the instances are not equal; otherwise, false. + An associated CancellationTokenSource has been disposed. + + + + Throws a OperationCanceledException if + this token has had cancellation requested. + + + This method provides functionality equivalent to: + + if (token.IsCancellationRequested) + throw new OperationCanceledException(token); + + + The token has had cancellation requested. + The associated CancellationTokenSource has been disposed. + + + + Returns an empty CancellationToken value. + + + The value returned by this property will be non-cancelable by default. + + + + + Gets whether cancellation has been requested for this token. + + Whether cancellation has been requested for this token. + + + This property indicates whether cancellation has been requested for this token, + either through the token initially being construted in a canceled state, or through + calling Cancel + on the token's associated . + + + If this property is true, it only guarantees that cancellation has been requested. + It does not guarantee that every registered handler + has finished executing, nor that cancellation requests have finished propagating + to all registered handlers. Additional synchronization may be required, + particularly in situations where related objects are being canceled concurrently. + + + + + + Gets whether this token is capable of being in the canceled state. + + + If CanBeCanceled returns false, it is guaranteed that the token will never transition + into a canceled state, meaning that will never + return true. + + + + + Gets a that is signaled when the token is canceled. + + Accessing this property causes a WaitHandle + to be instantiated. It is preferable to only use this property when necessary, and to then + dispose the associated instance at the earliest opportunity (disposing + the source will dispose of this allocated handle). The handle should not be closed or disposed directly. + + The associated CancellationTokenSource has been disposed. + + + + Represents a callback delegate that has been registered with a CancellationToken. + + + To unregister a callback, dispose the corresponding Registration instance. + + + + + Attempts to deregister the item. If it's already being run, this may fail. + Entails a full memory fence. + + True if the callback was found and deregistered, false otherwise. + + + + Disposes of the registration and unregisters the target callback from the associated + CancellationToken. + If the target callback is currently executing this method will wait until it completes, except + in the degenerate cases where a callback method deregisters itself. + + + + + Determines whether two CancellationTokenRegistration + instances are equal. + + The first instance. + The second instance. + True if the instances are equal; otherwise, false. + + + + Determines whether two CancellationTokenRegistration instances are not equal. + + The first instance. + The second instance. + True if the instances are not equal; otherwise, false. + + + + Determines whether the current CancellationTokenRegistration instance is equal to the + specified . + + The other object to which to compare this instance. + True, if both this and are equal. False, otherwise. + Two CancellationTokenRegistration instances are equal if + they both refer to the output of a single call to the same Register method of a + CancellationToken. + + + + + Determines whether the current CancellationToken instance is equal to the + specified . + + The other CancellationTokenRegistration to which to compare this instance. + True, if both this and are equal. False, otherwise. + Two CancellationTokenRegistration instances are equal if + they both refer to the output of a single call to the same Register method of a + CancellationToken. + + + + + Serves as a hash function for a CancellationTokenRegistration.. + + A hash code for the current CancellationTokenRegistration instance. + + + + Signals to a that it should be canceled. + + + + is used to instantiate a + (via the source's Token property) + that can be handed to operations that wish to be notified of cancellation or that can be used to + register asynchronous operations for cancellation. That token may have cancellation requested by + calling to the source's Cancel + method. + + + All members of this class, except Dispose, are thread-safe and may be used + concurrently from multiple threads. + + + + + The ID of the thread currently executing the main body of CTS.Cancel() + this helps us to know if a call to ctr.Dispose() is running 'within' a cancellation callback. + This is updated as we move between the main thread calling cts.Cancel() and any syncContexts that are used to + actually run the callbacks. + + + + Initializes the . + + + + + Communicates a request for cancellation. + + + + The associated will be + notified of the cancellation and will transition to a state where + IsCancellationRequested returns true. + Any callbacks or cancelable operations + registered with the will be executed. + + + Cancelable operations and callbacks registered with the token should not throw exceptions. + However, this overload of Cancel will aggregate any exceptions thrown into a , + such that one callback throwing an exception will not prevent other registered callbacks from being executed. + + + The that was captured when each callback was registered + will be reestablished when the callback is invoked. + + + An aggregate exception containing all the exceptions thrown + by the registered callbacks on the associated . + This has been disposed. + + + + Communicates a request for cancellation. + + + + The associated will be + notified of the cancellation and will transition to a state where + IsCancellationRequested returns true. + Any callbacks or cancelable operations + registered with the will be executed. + + + Cancelable operations and callbacks registered with the token should not throw exceptions. + If is true, an exception will immediately propagate out of the + call to Cancel, preventing the remaining callbacks and cancelable operations from being processed. + If is false, this overload will aggregate any + exceptions thrown into a , + such that one callback throwing an exception will not prevent other registered callbacks from being executed. + + + The that was captured when each callback was registered + will be reestablished when the callback is invoked. + + + Specifies whether exceptions should immediately propagate. + An aggregate exception containing all the exceptions thrown + by the registered callbacks on the associated . + This has been disposed. + + + + Releases the resources used by this . + + + This method is not thread-safe for any other concurrent calls. + + + + + Throws an exception if the source has been disposed. + + + + + InternalGetStaticSource() + + Whether the source should be set. + A static source to be shared among multiple tokens. + + + + Registers a callback object. If cancellation has already occurred, the + callback will have been run by the time this method returns. + + + + + + + + + + Invoke the Canceled event. + + + The handlers are invoked synchronously in LIFO order. + + + + + Creates a CancellationTokenSource that will be in the canceled state + when any of the source tokens are in the canceled state. + + The first CancellationToken to observe. + The second CancellationToken to observe. + A CancellationTokenSource that is linked + to the source tokens. + A CancellationTokenSource associated with + one of the source tokens has been disposed. + + + + Creates a CancellationTokenSource that will be in the canceled state + when any of the source tokens are in the canceled state. + + The CancellationToken instances to observe. + A CancellationTokenSource that is linked + to the source tokens. + is null. + A CancellationTokenSource associated with + one of the source tokens has been disposed. + + + + Gets whether cancellation has been requested for this CancellationTokenSource. + + Whether cancellation has been requested for this CancellationTokenSource. + + + This property indicates whether cancellation has been requested for this token source, such as + due to a call to its + Cancel method. + + + If this property returns true, it only guarantees that cancellation has been requested. It does not + guarantee that every handler registered with the corresponding token has finished executing, nor + that cancellation requests have finished propagating to all registered handlers. Additional + synchronization may be required, particularly in situations where related objects are being + canceled concurrently. + + + + + + A simple helper to determine whether cancellation has finished. + + + + + A simple helper to determine whether disposal has occured. + + + + + The ID of the thread that is running callbacks. + + + + + Gets the CancellationToken + associated with this . + + The CancellationToken + associated with this . + The token source has been + disposed. + + + + + + + + + + + + + + The currently executing callback + + + + + A helper class for collating the various bits of information required to execute + cancellation callbacks. + + + + + InternalExecuteCallbackSynchronously_GeneralPath + This will be called on the target synchronization context, however, we still need to restore the required execution context + + + + + A sparsely populated array. Elements can be sparse and some null, but this allows for + lock-free additions and growth, and also for constant time removal (by nulling out). + + The kind of elements contained within. + + + + Allocates a new array with the given initial size. + + How many array slots to pre-allocate. + + + + Adds an element in the first available slot, beginning the search from the tail-to-head. + If no slots are available, the array is grown. The method doesn't return until successful. + + The element to add. + Information about where the add happened, to enable O(1) deregistration. + + + + The tail of the doubly linked list. + + + + + A struct to hold a link to the exact spot in an array an element was inserted, enabling + constant time removal later on. + + + + + A fragment of a sparsely populated array, doubly linked. + + The kind of elements contained within. + + + + Provides lazy initialization routines. + + + These routines avoid needing to allocate a dedicated, lazy-initialization instance, instead using + references to ensure targets have been initialized as they are accessed. + + + + + Initializes a target reference type with the type's default constructor if the target has not + already been initialized. + + The refence type of the reference to be initialized. + A reference of type to initialize if it has not + already been initialized. + The initialized reference of type . + Type does not have a default + constructor. + + Permissions to access the constructor of type were missing. + + + + This method may only be used on reference types. To ensure initialization of value + types, see other overloads of EnsureInitialized. + + + This method may be used concurrently by multiple threads to initialize . + In the event that multiple threads access this method concurrently, multiple instances of + may be created, but only one will be stored into . In such an occurrence, this method will not dispose of the + objects that were not stored. If such objects must be disposed, it is up to the caller to determine + if an object was not used and to then dispose of the object appropriately. + + + + + + Initializes a target reference type using the specified function if it has not already been + initialized. + + The reference type of the reference to be initialized. + The reference of type to initialize if it has not + already been initialized. + The invoked to initialize the + reference. + The initialized reference of type . + Type does not have a + default constructor. + returned + null. + + + This method may only be used on reference types, and may + not return a null reference (Nothing in Visual Basic). To ensure initialization of value types or + to allow null reference types, see other overloads of EnsureInitialized. + + + This method may be used concurrently by multiple threads to initialize . + In the event that multiple threads access this method concurrently, multiple instances of + may be created, but only one will be stored into . In such an occurrence, this method will not dispose of the + objects that were not stored. If such objects must be disposed, it is up to the caller to determine + if an object was not used and to then dispose of the object appropriately. + + + + + + Initialize the target using the given delegate (slow path). + + The reference type of the reference to be initialized. + The variable that need to be initialized + The delegate that will be executed to initialize the target + The initialized variable + + + + Initializes a target reference or value type with its default constructor if it has not already + been initialized. + + The type of the reference to be initialized. + A reference or value of type to initialize if it + has not already been initialized. + A reference to a boolean that determines whether the target has already + been initialized. + A reference to an object used as the mutually exclusive lock for initializing + . + The initialized value of type . + + + + Initializes a target reference or value type with a specified function if it has not already been + initialized. + + The type of the reference to be initialized. + A reference or value of type to initialize if it + has not already been initialized. + A reference to a boolean that determines whether the target has already + been initialized. + A reference to an object used as the mutually exclusive lock for initializing + . + The invoked to initialize the + reference or value. + The initialized value of type . + + + + Ensure the target is initialized and return the value (slow path). This overload permits nulls + and also works for value type targets. Uses the supplied function to create the value. + + The type of target. + A reference to the target to be initialized. + A reference to a location tracking whether the target has been initialized. + A reference to a location containing a mutual exclusive lock. + + The to invoke in order to produce the lazily-initialized value. + + The initialized object. + + + + Provides a slimmed down version of . + + + All public and protected members of are thread-safe and may be used + concurrently from multiple threads, with the exception of Dispose, which + must only be used when all other operations on the have + completed, and Reset, which should only be used when no other threads are + accessing the event. + + + + + Initializes a new instance of the + class with an initial state of nonsignaled. + + + + + Initializes a new instance of the + class with a Boolen value indicating whether to set the intial state to signaled. + + true to set the initial state signaled; false to set the initial state + to nonsignaled. + + + + Initializes a new instance of the + class with a Boolen value indicating whether to set the intial state to signaled and a specified + spin count. + + true to set the initial state to signaled; false to set the initial state + to nonsignaled. + The number of spin waits that will occur before falling back to a true + wait. + is less than + 0 or greater than the maximum allowed value. + + + + Initializes the internal state of the event. + + Whether the event is set initially or not. + The spin count that decides when the event will block. + + + + Helper to ensure the lock object is created before first use. + + + + + This method lazily initializes the event object. It uses CAS to guarantee that + many threads racing to call this at once don't result in more than one event + being stored and used. The event will be signaled or unsignaled depending on + the state of the thin-event itself, with synchronization taken into account. + + True if a new event was created and stored, false otherwise. + + + + Sets the state of the event to signaled, which allows one or more threads waiting on the event to + proceed. + + + + + Private helper to actually perform the Set. + + Indicates whether we are calling Set() during cancellation. + The object has been canceled. + + + + Sets the state of the event to nonsignaled, which causes threads to block. + + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + Blocks the current thread until the current is set. + + + The maximum number of waiters has been exceeded. + + + The caller of this method blocks indefinitely until the current instance is set. The caller will + return immediately if the event is currently in a set state. + + + + + Blocks the current thread until the current receives a signal, + while observing a . + + The to + observe. + + The maximum number of waiters has been exceeded. + + was + canceled. + + The caller of this method blocks indefinitely until the current instance is set. The caller will + return immediately if the event is currently in a set state. + + + + + Blocks the current thread until the current is set, using a + to measure the time interval. + + A that represents the number of milliseconds + to wait, or a that represents -1 milliseconds to wait indefinitely. + + true if the was set; otherwise, + false. + is a negative + number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater + than . + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + to measure the time interval, while observing a . + + A that represents the number of milliseconds + to wait, or a that represents -1 milliseconds to wait indefinitely. + + The to + observe. + true if the was set; otherwise, + false. + is a negative + number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater + than . + was canceled. + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + 32-bit signed integer to measure the time interval. + + The number of milliseconds to wait, or (-1) to wait indefinitely. + true if the was set; otherwise, + false. + is a + negative number other than -1, which represents an infinite time-out. + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + 32-bit signed integer to measure the time interval, while observing a . + + The number of milliseconds to wait, or (-1) to wait indefinitely. + The to + observe. + true if the was set; otherwise, + false. + is a + negative number other than -1, which represents an infinite time-out. + + The maximum number of waiters has been exceeded. + + was canceled. + + + + Releases all resources used by the current instance of . + + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + When overridden in a derived class, releases the unmanaged resources used by the + , and optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only unmanaged resources. + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + Throw ObjectDisposedException if the MRES is disposed + + + + + Private helper method to wake up waiters when a cancellationToken gets canceled. + + + + + Private helper method for updating parts of a bit-string state value. + Mainly called from the IsSet and Waiters properties setters + + + Note: the parameter types must be int as CompareExchange cannot take a Uint + + The new value + The mask used to set the bits + + + + Private helper method - performs Mask and shift, particular helpful to extract a field from a packed word. + eg ExtractStatePortionAndShiftRight(0x12345678, 0xFF000000, 24) => 0x12, ie extracting the top 8-bits as a simple integer + + ?? is there a common place to put this rather than being private to MRES? + + + + + + + + + Performs a Mask operation, but does not perform the shift. + This is acceptable for boolean values for which the shift is unnecessary + eg (val & Mask) != 0 is an appropriate way to extract a boolean rather than using + ((val & Mask) >> shiftAmount) == 1 + + ?? is there a common place to put this rather than being private to MRES? + + + + + + + Helper function to measure and update the wait time + + The first time (in Ticks) observed when the wait started. + The orginal wait timeoutout in milliseconds. + The new wait time in milliseconds, -1 if the time expired, -2 if overflow in counters + has occurred. + + + + Gets the underlying object for this . + + The underlying event object fore this . + + Accessing this property forces initialization of an underlying event object if one hasn't + already been created. To simply wait on this , + the public Wait methods should be preferred. + + + + + Gets whether the event is set. + + true if the event has is set; otherwise, false. + + + + Gets the number of spin waits that will be occur before falling back to a true wait. + + + + + How many threads are waiting. + + + + + Provides support for spin-based waiting. + + + + encapsulates common spinning logic. On single-processor machines, yields are + always used instead of busy waits, and on computers with Intel™ processors employing Hyper-Threading™ + technology, it helps to prevent hardware thread starvation. SpinWait encapsulates a good mixture of + spinning and true yielding. + + + is a value type, which means that low-level code can utilize SpinWait without + fear of unnecessary allocation overheads. SpinWait is not generally useful for ordinary applications. + In most cases, you should use the synchronization classes provided by the .NET Framework, such as + . For most purposes where spin waiting is required, however, + the type should be preferred over the System.Threading.Thread.SpinWait method. + + + While SpinWait is designed to be used in concurrent applications, it is not designed to be + used from multiple threads concurrently. SpinWait's members are not thread-safe. If multiple + threads must spin, each should use its own instance of SpinWait. + + + + + + Performs a single spin. + + + This is typically called in a loop, and may change in behavior based on the number of times a + has been called thus far on this instance. + + + + + Resets the spin counter. + + + This makes and behave as though no calls + to had been issued on this instance. If a instance + is reused many times, it may be useful to reset it to avoid yielding too soon. + + + + + Spins until the specified condition is satisfied. + + A delegate to be executed over and over until it returns true. + The argument is null. + + + + Spins until the specified condition is satisfied or until the specified timeout is expired. + + A delegate to be executed over and over until it returns true. + + A that represents the number of milliseconds to wait, + or a TimeSpan that represents -1 milliseconds to wait indefinitely. + True if the condition is satisfied within the timeout; otherwise, false + The argument is null. + is a negative number + other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater than + . + + + + Spins until the specified condition is satisfied or until the specified timeout is expired. + + A delegate to be executed over and over until it returns true. + The number of milliseconds to wait, or (-1) to wait indefinitely. + True if the condition is satisfied within the timeout; otherwise, false + The argument is null. + is a + negative number other than -1, which represents an infinite time-out. + + + + Gets the number of times has been called on this instance. + + + + + Gets whether the next call to will yield the processor, triggering a + forced context switch. + + Whether the next call to will yield the processor, triggering a + forced context switch. + + On a single-CPU machine, always yields the processor. On machines with + multiple CPUs, may yield after an unspecified number of calls. + + + + + A helper class to get the number of preocessors, it updates the numbers of processors every sampling interval + + + + + Gets the number of available processors + + + + + Gets whether the current machine has only a single processor. + + + + + Represents an asynchronous operation that produces a result at some time in the future. + + + The type of the result produced by this . + + + + instances may be created in a variety of ways. The most common approach is by + using the task's property to retrieve a instance that can be used to create tasks for several + purposes. For example, to create a that runs a function, the factory's StartNew + method may be used: + + // C# + var t = Task<int>.Factory.StartNew(() => GenerateResult()); + - or - + var t = Task.Factory.StartNew(() => GenerateResult()); + + ' Visual Basic + Dim t = Task<int>.Factory.StartNew(Function() GenerateResult()) + - or - + Dim t = Task.Factory.StartNew(Function() GenerateResult()) + + + + The class also provides constructors that initialize the task but that do not + schedule it for execution. For performance reasons, the StartNew method should be the + preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation + and scheduling must be separated, the constructors may be used, and the task's + Start + method may then be used to schedule the task for execution at a later time. + + + All members of , except for + Dispose, are thread-safe + and may be used from multiple threads concurrently. + + + + + + Represents an asynchronous operation. + + + + instances may be created in a variety of ways. The most common approach is by + using the Task type's property to retrieve a instance that can be used to create tasks for several + purposes. For example, to create a that runs an action, the factory's StartNew + method may be used: + + // C# + var t = Task.Factory.StartNew(() => DoAction()); + + ' Visual Basic + Dim t = Task.Factory.StartNew(Function() DoAction()) + + + + The class also provides constructors that initialize the Task but that do not + schedule it for execution. For performance reasons, TaskFactory's StartNew method should be the + preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation + and scheduling must be separated, the constructors may be used, and the task's + method may then be used to schedule the task for execution at a later time. + + + All members of , except for , are thread-safe + and may be used from multiple threads concurrently. + + + For operations that return values, the class + should be used. + + + For developers implementing custom debuggers, several internal and private members of Task may be + useful (these may change from release to release). The Int32 m_taskId field serves as the backing + store for the property, however accessing this field directly from a debugger may be + more efficient than accessing the same value through the property's getter method (the + s_taskIdCounter Int32 counter is used to retrieve the next available ID for a Task). Similarly, the + Int32 m_stateFlags field stores information about the current lifecycle stage of the Task, + information also accessible through the property. The m_action System.Object + field stores a reference to the Task's delegate, and the m_stateObject System.Object field stores the + async state passed to the Task by the developer. Finally, for debuggers that parse stack frames, the + InternalWait method serves a potential marker for when a Task is entering a wait operation. + + + + + + A type initializer that runs with the appropriate permissions. + + + + + Initializes a new with the specified action. + + The delegate that represents the code to execute in the Task. + The argument is null. + + + + Initializes a new with the specified action and CancellationToken. + + The delegate that represents the code to execute in the Task. + The CancellationToken + that will be assigned to the new Task. + The argument is null. + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action and creation options. + + The delegate that represents the code to execute in the task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action and creation options. + + The delegate that represents the code to execute in the task. + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action and state. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + + The argument is null. + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + The that will be assigned to the new task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + An internal constructor used by the factory methods on task and its descendent(s). + This variant does not capture the ExecutionContext; it is up to the caller to do that. + + An action to execute. + Optional state to pass to the action. + Parent of Task. + A CancellationToken for the task. + A task scheduler under which the task will run. + Options to control its execution. + Internal options to control its execution + + + + Common logic used by the following internal ctors: + Task() + Task(object action, object state, Task parent, TaskCreationOptions options, TaskScheduler taskScheduler) + + ASSUMES THAT m_creatingTask IS ALREADY SET. + + + Action for task to execute. + Object to which to pass to action (may be null) + Task scheduler on which to run thread (only used by continuation tasks). + A CancellationToken for the Task. + Options to customize behavior of Task. + Internal options to customize behavior of Task. + + + + Checks if we registered a CT callback during construction, and deregisters it. + This should be called when we know the registration isn't useful anymore. Specifically from Finish() if the task has completed + successfully or with an exception. + + + + + Captures the ExecutionContext so long as flow isn't suppressed. + + A stack crawl mark pointing to the frame of the caller. + + + + Internal function that will be called by a new child task to add itself to + the children list of the parent (this). + + Since a child task can only be created from the thread executing the action delegate + of this task, reentrancy is neither required nor supported. This should not be called from + anywhere other than the task construction/initialization codepaths. + + + + + Starts the , scheduling it for execution to the current TaskScheduler. + + + A task may only be started and run only once. Any attempts to schedule a task a second time + will result in an exception. + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Starts the , scheduling it for execution to the specified TaskScheduler. + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + The TaskScheduler with which to associate + and execute this task. + + + The argument is null. + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Runs the synchronously on the current TaskScheduler. + + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + Tasks executed with will be associated with the current TaskScheduler. + + + If the target scheduler does not support running this Task on the current thread, the Task will + be scheduled for execution on the scheduler, and the current thread will block until the + Task has completed execution. + + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Runs the synchronously on the scheduler provided. + + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + If the target scheduler does not support running this Task on the current thread, the Task will + be scheduled for execution on the scheduler, and the current thread will block until the + Task has completed execution. + + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + The parameter + is null. + The scheduler on which to attempt to run this task inline. + + + + Throws an exception if the task has been disposed, and hence can no longer be accessed. + + The task has been disposed. + + + + Sets the internal completion event. + + + + + Disposes the , releasing all of its unmanaged resources. + + + Unlike most of the members of , this method is not thread-safe. + Also, may only be called on a that is in one of + the final states: RanToCompletion, + Faulted, or + Canceled. + + + The exception that is thrown if the is not in + one of the final states: RanToCompletion, + Faulted, or + Canceled. + + + + + Disposes the , releasing all of its unmanaged resources. + + + A Boolean value that indicates whether this method is being called due to a call to . + + + Unlike most of the members of , this method is not thread-safe. + + + + + Schedules the task for execution. + + If true, TASK_STATE_STARTED bit is turned on in + an atomic fashion, making sure that TASK_STATE_CANCELED does not get set + underneath us. If false, TASK_STATE_STARTED bit is OR-ed right in. This + allows us to streamline things a bit for StartNew(), where competing cancellations + are not a problem. + + + + Adds an exception to the list of exceptions this task has thrown. + + An object representing either an Exception or a collection of Exceptions. + + + + Returns a list of exceptions by aggregating the holder's contents. Or null if + no exceptions have been thrown. + + Whether to include a TCE if cancelled. + An aggregate exception, or null if no exceptions have been caught. + + + + Throws an aggregate exception if the task contains exceptions. + + + + + Checks whether this is an attached task, and whether we are being called by the parent task. + And sets the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag based on that. + + This is meant to be used internally when throwing an exception, and when WaitAll is gathering + exceptions for tasks it waited on. If this flag gets set, the implicit wait on children + will skip exceptions to prevent duplication. + + This should only be called when this task has completed with an exception + + + + + + Signals completion of this particular task. + + The bUserDelegateExecuted parameter indicates whether this Finish() call comes following the + full execution of the user delegate. + + If bUserDelegateExecuted is false, it mean user delegate wasn't invoked at all (either due to + a cancellation request, or because this task is a promise style Task). In this case, the steps + involving child tasks (i.e. WaitForChildren) will be skipped. + + + + + + FinishStageTwo is to be executed as soon as we known there are no more children to complete. + It can happen i) either on the thread that originally executed this task (if no children were spawned, or they all completed by the time this task's delegate quit) + ii) or on the thread that executed the last child. + + + + + Final stage of the task completion code path. Notifies the parent (if any) that another of its childre are done, and runs continuations. + This function is only separated out from FinishStageTwo because these two operations are also needed to be called from CancellationCleanupLogic() + + + + + This is called by children of this task when they are completed. + + + + + This is to be called just before the task does its final state transition. + It traverses the list of exceptional children, and appends their aggregate exceptions into this one's exception list + + + + + Special purpose Finish() entry point to be used when the task delegate throws a ThreadAbortedException + This makes a note in the state flags so that we avoid any costly synchronous operations in the finish codepath + such as inlined continuations + + + Indicates whether the ThreadAbortException was added to this task's exception holder. + This should always be true except for the case of non-root self replicating task copies. + + Whether the delegate was executed. + + + + Executes the task. This method will only be called once, and handles bookeeping associated with + self-replicating tasks, in addition to performing necessary exception marshaling. + + The task has already been disposed. + + + + IThreadPoolWorkItem override, which is the entry function for this task when the TP scheduler decides to run it. + + + + + + Outermost entry function to execute this task. Handles all aspects of executing a task on the caller thread. + Currently this is called by IThreadPoolWorkItem.ExecuteWorkItem(), and TaskManager.TryExecuteInline. + + + Performs atomic updates to prevent double execution. Should only be set to true + in codepaths servicing user provided TaskSchedulers. The ConcRT or ThreadPool schedulers don't need this. + + + + The actual code which invokes the body of the task. This can be overriden in derived types. + + + + + Alternate InnerInvoke prototype to be called from ExecuteSelfReplicating() so that + the Parallel Debugger can discover the actual task being invoked. + Details: Here, InnerInvoke is actually being called on the rootTask object while we are actually executing the + childTask. And the debugger needs to discover the childTask, so we pass that down as an argument. + The NoOptimization and NoInlining flags ensure that the childTask pointer is retained, and that this + function appears on the callstack. + + + + + + Performs whatever handling is necessary for an unhandled exception. Normally + this just entails adding the exception to the holder object. + + The exception that went unhandled. + + + + Waits for the to complete execution. + + + The was canceled -or- an exception was thrown during + the execution of the . + + + The has been disposed. + + + + + Waits for the to complete execution. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + true if the completed execution within the allotted time; otherwise, false. + + + The was canceled -or- an exception was thrown during the execution of the . + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + The has been disposed. + + + + + Waits for the to complete execution. + + + A to observe while waiting for the task to complete. + + + The was canceled. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + + + Waits for the to complete execution. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + true if the completed execution within the allotted time; otherwise, + false. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + + + Waits for the to complete execution. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for the task to complete. + + + true if the completed execution within the allotted time; otherwise, false. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + The core wait function, which is only accesible internally. It's meant to be used in places in TPL code where + the current context is known or cached. + + + + + Cancels the . + + Indiactes whether we should only cancel non-invoked tasks. + For the default scheduler this option will only be serviced through TryDequeue. + For custom schedulers we also attempt an atomic state transition. + true if the task was successfully canceled; otherwise, false. + The + has been disposed. + + + + Sets the task's cancellation acknowledged flag. + + + + + Runs all of the continuations, as appropriate. + + + + + Helper function to determine whether the current task is in the state desired by the + continuation kind under evaluation. Three possibilities exist: the task failed with + an unhandled exception (OnFailed), the task was canceled before running (OnAborted), + or the task completed successfully (OnCompletedSuccessfully). Note that the last + one includes completing due to cancellation. + + The continuation options under evaluation. + True if the continuation should be run given the task's current state. + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + The that will be assigned to the new continuation task. + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Converts TaskContinuationOptions to TaskCreationOptions, and also does + some validity checking along the way. + + Incoming TaskContinuationOptions + Outgoing TaskCreationOptions + Outgoing InternalTaskOptions + + + + Registers the continuation and possibly runs it (if the task is already finished). + + The continuation task itself. + TaskScheduler with which to associate continuation task. + Restrictions on when the continuation becomes active. + + + + Waits for all of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + An array of instances on which to wait. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + A to observe while waiting for the tasks to complete. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The was canceled. + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for the tasks to complete. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + Waits for a set of handles in a STA-aware way. In other words, it will wait for each + of the events individually if we're on a STA thread, because MsgWaitForMultipleObjectsEx + can't do a true wait-all due to its hidden message queue event. This is not atomic, + of course, but we only wait on one-way (MRE) events anyway so this is OK. + + An array of wait handles to wait on. + The timeout to use during waits. + The cancellationToken that enables a wait to be canceled. + True if all waits succeeded, false if a timeout occurred. + + + + Internal WaitAll implementation which is meant to be used with small number of tasks, + optimized for Parallel.Invoke and other structured primitives. + + + + + This internal function is only meant to be called by WaitAll() + If the completed task is canceled or it has other exceptions, here we will add those + into the passed in exception list (which will be lazily initialized here). + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + The index of the completed task in the array argument. + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + A to observe while waiting for a task to complete. + + + The index of the completed task in the array argument. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + The was canceled. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for a task to complete. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + Gets a unique ID for this Task instance. + + + Task IDs are assigned on-demand and do not necessarily represent the order in the which Task + instances were created. + + + + + Returns the unique ID of the currently executing Task. + + + + + Gets the Task instance currently executing, or + null if none exists. + + + + + Gets the Exception that caused the Task to end prematurely. If the Task completed successfully or has not yet thrown any + exceptions, this will return null. + + + Tasks that throw unhandled exceptions store the resulting exception and propagate it wrapped in a + in calls to Wait + or in accesses to the property. Any exceptions not observed by the time + the Task instance is garbage collected will be propagated on the finalizer thread. + + + The Task + has been disposed. + + + + + Gets the TaskStatus of this Task. + + + + + Gets whether this Task instance has completed + execution due to being canceled. + + + A Task will complete in Canceled state either if its CancellationToken + was marked for cancellation before the task started executing, or if the task acknowledged the cancellation request on + its already signaled CancellationToken by throwing an + OperationCanceledException2 that bears the same + CancellationToken. + + + + + Returns true if this task has a cancellation token and it was signaled. + To be used internally in execute entry codepaths. + + + + + This internal property provides access to the CancellationToken that was set on the task + when it was constructed. + + + + + Gets whether this threw an OperationCanceledException2 while its CancellationToken was signaled. + + + + + Gets whether this Task has completed. + + + will return true when the Task is in one of the three + final states: RanToCompletion, + Faulted, or + Canceled. + + + + + Checks whether this task has been disposed. + + + + + Gets the TaskCreationOptions used + to create this task. + + + + + Gets a that can be used to wait for the task to + complete. + + + Using the wait functionality provided by + should be preferred over using for similar + functionality. + + + The has been disposed. + + + + + Gets the state object supplied when the Task was created, + or null if none was supplied. + + + + + Gets an indication of whether the asynchronous operation completed synchronously. + + true if the asynchronous operation completed synchronously; otherwise, false. + + + + Provides access to the TaskScheduler responsible for executing this Task. + + + + + Provides access to factory methods for creating and instances. + + + The factory returned from is a default instance + of , as would result from using + the default constructor on TaskFactory. + + + + + Provides an event that can be used to wait for completion. + Only called by Wait*(), which means that we really do need to instantiate a completion event. + + + + + Determines whether this is the root task of a self replicating group. + + + + + Determines whether the task is a replica itself. + + + + + The property formerly known as IsFaulted. + + + + + Gets whether the completed due to an unhandled exception. + + + If is true, the Task's will be equal to + TaskStatus.Faulted, and its + property will be non-null. + + + + + Checks whether the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag is set, + This will only be used by the implicit wait to prevent double throws + + + + + + Checks whether the body was ever invoked. Used by task scheduler code to verify custom schedulers actually ran the task. + + + + + A structure to hold continuation information. + + + + + Constructs a new continuation structure. + + The task to be activated. + The continuation options. + The scheduler to use for the continuation. + + + + Invokes the continuation for the target completion task. + + The completed task. + Whether the continuation can be inlined. + + + + Initializes a new with the specified function. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + + The argument is null. + + + + + Initializes a new with the specified function. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + The to be assigned to this task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified function and creation options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified function and creation options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified function and state. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the action. + + The argument is null. + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + The to be assigned to the new task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + The to be assigned to the new task. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Creates a new future object. + + The parent task for this future. + A function that yields the future value. + The task scheduler which will be used to execute the future. + The CancellationToken for the task. + Options to control the future's behavior. + Internal options to control the future's behavior. + The argument specifies + a SelfReplicating , which is illegal."/>. + + + + Creates a new future object. + + The parent task for this future. + An object containing data to be used by the action; may be null. + A function that yields the future value. + The CancellationToken for the task. + The task scheduler which will be used to execute the future. + Options to control the future's behavior. + Internal options to control the future's behavior. + The argument specifies + a SelfReplicating , which is illegal."/>. + + + + Evaluates the value selector of the Task which is passed in as an object and stores the result. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new task. + A new continuation . + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The , when executed, should return a . This task's completion state will be transferred to the task returned + from the ContinueWith call. + + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be passed as + an argument this completed task. + + The that will be assigned to the new task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The , when executed, should return a . + This task's completion state will be transferred to the task returned from the + ContinueWith call. + + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Gets the result value of this . + + + The get accessor for this property ensures that the asynchronous operation is complete before + returning. Once the result of the computation is available, it is stored and will be returned + immediately on later calls to . + + + + + Provides access to factory methods for creating instances. + + + The factory returned from is a default instance + of , as would result from using + the default constructor on the factory type. + + + + + Provides support for creating and scheduling + Task{TResult} objects. + + The type of the results that are available though + the Task{TResult} objects that are associated with + the methods in this class. + + + There are many common patterns for which tasks are relevant. The + class encodes some of these patterns into methods that pick up default settings, which are + configurable through its constructors. + + + A default instance of is available through the + Task{TResult}.Factory property. + + + + + + Initializes a instance with the default configuration. + + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the default configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The + TaskScheduler to use to schedule any tasks created with this TaskFactory{TResult}. A null value + indicates that the current TaskScheduler should be used. + + + With this constructor, the + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to , unless it's null, in which case the property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}. + + + The exception that is thrown when the + argument or the + argument specifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}. + + + The default + TaskScheduler to use to schedule any Tasks created with this TaskFactory{TResult}. A null value + indicates that TaskScheduler.Current should be used. + + + The exception that is thrown when the + argument or the + argumentspecifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to + , unless it's null, in which case the property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new task. + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The that will be assigned to the new task. + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Gets the default CancellationToken of this + TaskFactory. + + + This property returns the default that will be assigned to all + tasks created by this factory unless another CancellationToken value is explicitly specified + during the call to the factory methods. + + + + + Gets the TaskScheduler of this + TaskFactory{TResult}. + + + This property returns the default scheduler for this factory. It will be used to schedule all + tasks unless another scheduler is explicitly specified during calls to this factory's methods. + If null, TaskScheduler.Current + will be used. + + + + + Gets the TaskCreationOptions + value of this TaskFactory{TResult}. + + + This property returns the default creation options for this factory. They will be used to create all + tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Gets the TaskContinuationOptions + value of this TaskFactory{TResult}. + + + This property returns the default continuation options for this factory. They will be used to create + all continuation tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Represents the current stage in the lifecycle of a . + + + + + The task has been initialized but has not yet been scheduled. + + + + + The task is waiting to be activated and scheduled internally by the .NET Framework infrastructure. + + + + + The task has been scheduled for execution but has not yet begun executing. + + + + + The task is running but has not yet completed. + + + + + The task has finished executing and is implicitly waiting for + attached child tasks to complete. + + + + + The task completed execution successfully. + + + + + The task acknowledged cancellation by throwing an OperationCanceledException2 with its own CancellationToken + while the token was in signaled state, or the task's CancellationToken was already signaled before the + task started executing. + + + + + The task completed due to an unhandled exception. + + + + + Specifies flags that control optional behavior for the creation and execution of tasks. + + + + + Specifies that the default behavior should be used. + + + + + A hint to a TaskScheduler to schedule a + task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to + be run sooner, and tasks scheduled later will be more likely to be run later. + + + + + Specifies that a task will be a long-running, course-grained operation. It provides a hint to the + TaskScheduler that oversubscription may be + warranted. + + + + + Specifies that a task is attached to a parent in the task hierarchy. + + + + + Task creation flags which are only used internally. + + + + Specifies "No internal task options" + + + Used to filter out internal vs. public task creation options. + + + Specifies that the task will be queued by the runtime before handing it over to the user. + This flag will be used to skip the cancellationtoken registration step, which is only meant for unstarted tasks. + + + + Specifies flags that control optional behavior for the creation and execution of continuation tasks. + + + + + Default = "Continue on any, no task options, run asynchronously" + Specifies that the default behavior should be used. Continuations, by default, will + be scheduled when the antecedent task completes, regardless of the task's final TaskStatus. + + + + + A hint to a TaskScheduler to schedule a + task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to + be run sooner, and tasks scheduled later will be more likely to be run later. + + + + + Specifies that a task will be a long-running, course-grained operation. It provides + a hint to the TaskScheduler that + oversubscription may be warranted. + + + + + Specifies that a task is attached to a parent in the task hierarchy. + + + + + Specifies that the continuation task should not be scheduled if its antecedent ran to completion. + This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should not be scheduled if its antecedent threw an unhandled + exception. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should not be scheduled if its antecedent was canceled. This + option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent ran to + completion. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent threw an + unhandled exception. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent was canceled. + This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be executed synchronously. With this option + specified, the continuation will be run on the same thread that causes the antecedent task to + transition into its final state. If the antecedent is already complete when the continuation is + created, the continuation will run on the thread creating the continuation. Only very + short-running continuations should be executed synchronously. + + + + + Represents an exception used to communicate task cancellation. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + class with a specified error message and a reference to the inner exception that is the cause of + this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + + Initializes a new instance of the class + with a reference to the that has been canceled. + + A task that has been canceled. + + + + Gets the task associated with this exception. + + + It is permissible for no Task to be associated with a + , in which case + this property will return null. + + + + + Represents the producer side of a unbound to a + delegate, providing access to the consumer side through the property. + + + + It is often the case that a is desired to + represent another asynchronous operation. + TaskCompletionSource is provided for this purpose. It enables + the creation of a task that can be handed out to consumers, and those consumers can use the members + of the task as they would any other. However, unlike most tasks, the state of a task created by a + TaskCompletionSource is controlled explicitly by the methods on TaskCompletionSource. This enables the + completion of the external asynchronous operation to be propagated to the underlying Task. The + separation also ensures that consumers are not able to transition the state without access to the + corresponding TaskCompletionSource. + + + All members of are thread-safe + and may be used from multiple threads concurrently. + + + The type of the result value assocatied with this . + + + + Creates a . + + + + + Creates a + with the specified options. + + + The created + by this instance and accessible through its property + will be instantiated using the specified . + + The options to use when creating the underlying + . + + The represent options invalid for use + with a . + + + + + Creates a + with the specified state. + + The state to use as the underlying + 's AsyncState. + + + + Creates a with + the specified state and options. + + The options to use when creating the underlying + . + The state to use as the underlying + 's AsyncState. + + The represent options invalid for use + with a . + + + + + Attempts to transition the underlying + into the + Faulted + state. + + The exception to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The argument is null. + The was disposed. + + + + Attempts to transition the underlying + into the + Faulted + state. + + The collection of exceptions to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The argument is null. + There are one or more null elements in . + The collection is empty. + The was disposed. + + + + Transitions the underlying + into the + Faulted + state. + + The exception to bind to this . + The argument is null. + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + Faulted + state. + + The collection of exceptions to bind to this . + The argument is null. + There are one or more null elements in . + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Attempts to transition the underlying + into the + RanToCompletion + state. + + The result value to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + RanToCompletion + state. + + The result value to bind to this . + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + Canceled + state. + + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Attempts to transition the underlying + into the + Canceled + state. + + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Gets the created + by this . + + + This property enables a consumer access to the that is controlled by this instance. + The , , + , and + methods (and their "Try" variants) on this instance all result in the relevant state + transitions on this underlying Task. + + + + + An exception holder manages a list of exceptions for one particular task. + It offers the ability to aggregate, but more importantly, also offers intrinsic + support for propagating unhandled exceptions that are never observed. It does + this by aggregating and throwing if the holder is ever GC'd without the holder's + contents ever having been requested (e.g. by a Task.Wait, Task.get_Exception, etc). + + + + + Creates a new holder; it will be registered for finalization. + + The task this holder belongs to. + + + + A finalizer that repropagates unhandled exceptions. + + + + + Add an exception to the internal list. This will ensure the holder is + in the proper state (handled/unhandled) depending on the list's contents. + + An exception object (either an Exception or an + IEnumerable{Exception}) to add to the list. + + + + A private helper method that ensures the holder is considered + unhandled, i.e. it is registered for finalization. + + + + + A private helper method that ensures the holder is considered + handled, i.e. it is not registered for finalization. + + Whether this is called from the finalizer thread. + + + + Allocates a new aggregate exception and adds the contents of the list to + it. By calling this method, the holder assumes exceptions to have been + "observed", such that the finalization check will be subsequently skipped. + + Whether this is being called from a finalizer. + An extra exception to be included (optionally). + The aggregate exception to throw. + + + + Provides a set of static (Shared in Visual Basic) methods for working with specific kinds of + instances. + + + + + Creates a proxy Task that represents the + asynchronous operation of a Task{Task}. + + + It is often useful to be able to return a Task from a + Task{TResult}, where the inner Task represents work done as part of the outer Task{TResult}. However, + doing so results in a Task{Task}, which, if not dealt with carefully, could produce unexpected behavior. Unwrap + solves this problem by creating a proxy Task that represents the entire asynchronous operation of such a Task{Task}. + + The Task{Task} to unwrap. + The exception that is thrown if the + argument is null. + A Task that represents the asynchronous operation of the provided Task{Task}. + + + + Creates a proxy Task{TResult} that represents the + asynchronous operation of a Task{Task{TResult}}. + + + It is often useful to be able to return a Task{TResult} from a Task{TResult}, where the inner Task{TResult} + represents work done as part of the outer Task{TResult}. However, doing so results in a Task{Task{TResult}}, + which, if not dealt with carefully, could produce unexpected behavior. Unwrap solves this problem by + creating a proxy Task{TResult} that represents the entire asynchronous operation of such a Task{Task{TResult}}. + + The Task{Task{TResult}} to unwrap. + The exception that is thrown if the + argument is null. + A Task{TResult} that represents the asynchronous operation of the provided Task{Task{TResult}}. /// Unwraps a Task that returns another Task. + + + + Provides support for creating and scheduling + Tasks. + + + + There are many common patterns for which tasks are relevant. The + class encodes some of these patterns into methods that pick up default settings, which are + configurable through its constructors. + + + A default instance of is available through the + Task.Factory property. + + + + + + Initializes a instance with the default configuration. + + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The + TaskScheduler to use to schedule any tasks created with this TaskFactory. A null value + indicates that the current TaskScheduler should be used. + + + With this constructor, the + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to , unless it's null, in which case the property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory. + + + The exception that is thrown when the + argument or the + argument specifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory. + + + The default + TaskScheduler to use to schedule any Tasks created with this TaskFactory. A null value + indicates that TaskScheduler.Current should be used. + + + The exception that is thrown when the + argument or the + argumentspecifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to + , unless it's null, in which case the property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The started Task. + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors + and then calling + Start to schedule it for execution. However, + unless creation and scheduling must be separated, StartNew is the recommended + approach for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The that will be assigned to the new task. + The started Task. + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors + and then calling + Start to schedule it for execution. However, + unless creation and scheduling must be separated, StartNew is the recommended + approach for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The that will be assigned to the new + A TaskCreationOptions value that controls the behavior of the + created + Task. + The TaskScheduler + that is used to schedule the created Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The started Task. + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The that will be assigned to the new + The started Task. + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The TaskScheduler + that is used to schedule the created Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the asynchronous + operation. + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the asynchronous + operation. + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the asynchronous + operation. + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Check validity of options passed to FromAsync method + + The options to be validated. + determines type of FromAsync method that called this method + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Gets the default CancellationToken of this + TaskFactory. + + + This property returns the default that will be assigned to all + tasks created by this factory unless another CancellationToken value is explicitly specified + during the call to the factory methods. + + + + + Gets the TaskScheduler of this + TaskFactory. + + + This property returns the default scheduler for this factory. It will be used to schedule all + tasks unless another scheduler is explicitly specified during calls to this factory's methods. + If null, TaskScheduler.Current + will be used. + + + + + Gets the TaskCreationOptions + value of this TaskFactory. + + + This property returns the default creation options for this factory. They will be used to create all + tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Gets the TaskContinuationOptions + value of this TaskFactory. + + + This property returns the default continuation options for this factory. They will be used to create + all continuation tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Represents an abstract scheduler for tasks. + + + + TaskScheduler acts as the extension point for all + pluggable scheduling logic. This includes mechanisms such as how to schedule a task for execution, and + how scheduled tasks should be exposed to debuggers. + + + All members of the abstract type are thread-safe + and may be used from multiple threads concurrently. + + + + + + Queues a Task to the scheduler. + + + + A class derived from TaskScheduler + implements this method to accept tasks being scheduled on the scheduler. + A typical implementation would store the task in an internal data structure, which would + be serviced by threads that would execute those tasks at some time in the future. + + + This method is only meant to be called by the .NET Framework and + should not be called directly by the derived class. This is necessary + for maintaining the consistency of the system. + + + The Task to be queued. + The argument is null. + + + + Determines whether the provided Task + can be executed synchronously in this call, and if it can, executes it. + + + + A class derived from TaskScheduler implements this function to + support inline execution of a task on a thread that initiates a wait on that task object. Inline + execution is optional, and the request may be rejected by returning false. However, better + scalability typically results the more tasks that can be inlined, and in fact a scheduler that + inlines too little may be prone to deadlocks. A proper implementation should ensure that a + request executing under the policies guaranteed by the scheduler can successfully inline. For + example, if a scheduler uses a dedicated thread to execute tasks, any inlining requests from that + thread should succeed. + + + If a scheduler decides to perform the inline execution, it should do so by calling to the base + TaskScheduler's + TryExecuteTask method with the provided task object, propagating + the return value. It may also be appropriate for the scheduler to remove an inlined task from its + internal data structures if it decides to honor the inlining request. Note, however, that under + some circumstances a scheduler may be asked to inline a task that was not previously provided to + it with the method. + + + The derived scheduler is responsible for making sure that the calling thread is suitable for + executing the given task as far as its own scheduling and execution policies are concerned. + + + The Task to be + executed. + A Boolean denoting whether or not task has previously been + queued. If this parameter is True, then the task may have been previously queued (scheduled); if + False, then the task is known not to have been queued, and this call is being made in order to + execute the task inline without queueing it. + A Boolean value indicating whether the task was executed inline. + The argument is + null. + The was already + executed. + + + + Generates an enumerable of Task instances + currently queued to the scheduler waiting to be executed. + + + + A class derived from implements this method in order to support + integration with debuggers. This method will only be invoked by the .NET Framework when the + debugger requests access to the data. The enumerable returned will be traversed by debugging + utilities to access the tasks currently queued to this scheduler, enabling the debugger to + provide a representation of this information in the user interface. + + + It is important to note that, when this method is called, all other threads in the process will + be frozen. Therefore, it's important to avoid synchronization with other threads that may lead to + blocking. If synchronization is necessary, the method should prefer to throw a + than to block, which could cause a debugger to experience delays. Additionally, this method and + the enumerable returned must not modify any globally visible state. + + + The returned enumerable should never be null. If there are currently no queued tasks, an empty + enumerable should be returned instead. + + + For developers implementing a custom debugger, this method shouldn't be called directly, but + rather this functionality should be accessed through the internal wrapper method + GetScheduledTasksForDebugger: + internal Task[] GetScheduledTasksForDebugger(). This method returns an array of tasks, + rather than an enumerable. In order to retrieve a list of active schedulers, a debugger may use + another internal method: internal static TaskScheduler[] GetTaskSchedulersForDebugger(). + This static method returns an array of all active TaskScheduler instances. + GetScheduledTasksForDebugger then may be used on each of these scheduler instances to retrieve + the list of scheduled tasks for each. + + + An enumerable that allows traversal of tasks currently queued to this scheduler. + + + This scheduler is unable to generate a list of queued tasks at this time. + + + + + Retrieves some thread static state that can be cached and passed to multiple + TryRunInline calls, avoiding superflous TLS fetches. + + A bag of TLS state (or null if none exists). + + + + Attempts to execute the target task synchronously. + + The task to run. + True if the task may have been previously queued, + false if the task was absolutely not previously queued. + The state retrieved from GetThreadStatics + True if it ran, false otherwise. + + + + Attempts to dequeue a Task that was previously queued to + this scheduler. + + The Task to be dequeued. + A Boolean denoting whether the argument was successfully dequeued. + The argument is null. + + + + Notifies the scheduler that a work item has made progress. + + + + + Initializes the . + + + + + Frees all resources associated with this scheduler. + + + + + Creates a + associated with the current . + + + All Task instances queued to + the returned scheduler will be executed through a call to the + Post method + on that context. + + + A associated with + the current SynchronizationContext, as + determined by SynchronizationContext.Current. + + + The current SynchronizationContext may not be used as a TaskScheduler. + + + + + Attempts to execute the provided Task + on this scheduler. + + + + Scheduler implementations are provided with Task + instances to be executed through either the method or the + method. When the scheduler deems it appropriate to run the + provided task, should be used to do so. TryExecuteTask handles all + aspects of executing a task, including action invocation, exception handling, state management, + and lifecycle control. + + + must only be used for tasks provided to this scheduler by the .NET + Framework infrastructure. It should not be used to execute arbitrary tasks obtained through + custom mechanisms. + + + + A Task object to be executed. + + The is not associated with this scheduler. + + A Boolean that is true if was successfully executed, false if it + was not. A common reason for execution failure is that the task had previously been executed or + is in the process of being executed by another thread. + + + + Provides an array of all queued Task instances + for the debugger. + + + The returned array is populated through a call to . + Note that this function is only meant to be invoked by a debugger remotely. + It should not be called by any other codepaths. + + An array of Task instances. + + This scheduler is unable to generate a list of queued tasks at this time. + + + + + Provides an array of all active TaskScheduler + instances for the debugger. + + + This function is only meant to be invoked by a debugger remotely. + It should not be called by any other codepaths. + + An array of TaskScheduler instances. + + + + Registers a new TaskScheduler instance in the global collection of schedulers. + + + + + Removes a TaskScheduler instance from the global collection of schedulers. + + + + + Indicates the maximum concurrency level this + is able to support. + + + + + Indicates whether this is a custom scheduler, in which case the safe code paths will be taken upon task entry + using a CAS to transition from queued state to executing. + + + + + Gets the default TaskScheduler instance. + + + + + Gets the TaskScheduler + associated with the currently executing task. + + + When not called from within a task, will return the scheduler. + + + + + Gets the unique ID for this . + + + + + Occurs when a faulted 's unobserved exception is about to trigger exception escalation + policy, which, by default, would terminate the process. + + + This AppDomain-wide event provides a mechanism to prevent exception + escalation policy (which, by default, terminates the process) from triggering. + Each handler is passed a + instance, which may be used to examine the exception and to mark it as observed. + + + + + Nested class that provides debugger view for TaskScheduler + + + + Default thread pool scheduler. + + + + A TaskScheduler implementation that executes all tasks queued to it through a call to + on the + that its associated with. The default constructor for this class binds to the current + + + + + Constructs a SynchronizationContextTaskScheduler associated with + + This constructor expects to be set. + + + + Implemetation of for this scheduler class. + + Simply posts the tasks to be executed on the associated . + + + + + + Implementation of for this scheduler class. + + The task will be executed inline only if the call happens within + the associated . + + + + + + + Implementes the property for + this scheduler class. + + By default it returns 1, because a based + scheduler only supports execution on a single thread. + + + + + Provides data for the event that is raised when a faulted 's + exception goes unobserved. + + + The Exception property is used to examine the exception without marking it + as observed, whereas the method is used to mark the exception + as observed. Marking the exception as observed prevents it from triggering exception escalation policy + which, by default, terminates the process. + + + + + Initializes a new instance of the class + with the unobserved exception. + + The Exception that has gone unobserved. + + + + Marks the as "observed," thus preventing it + from triggering exception escalation policy which, by default, terminates the process. + + + + + Gets whether this exception has been marked as "observed." + + + + + The Exception that went unobserved. + + + + + Represents an exception used to communicate an invalid operation by a + . + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + class using the default error message and a reference to the inner exception that is the cause of + this exception. + + The exception that is the cause of the current exception. + + + + Initializes a new instance of the + class with a specified error message and a reference to the inner exception that is the cause of + this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/ensureRedirect.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8+wp8/ensureRedirect.xml new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Runtime.dll b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Runtime.dll new file mode 100644 index 0000000..fa831ad Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Runtime.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Runtime.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Runtime.xml new file mode 100644 index 0000000..93cb00d --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Runtime.xml @@ -0,0 +1,56 @@ + + + + System.Runtime + + + + Defines a provider for progress updates. + The type of progress update value. + + + Reports a progress update. + The value of the updated progress. + + + Identities the async state machine type for this method. + + + Identities the state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + Gets the type that implements the state machine. + + + Initializes the attribute. + The type that implements the state machine. + + + + Allows you to obtain the method or property name of the caller to the method. + + + + + Allows you to obtain the line number in the source file at which the method is called. + + + + + Allows you to obtain the full path of the source file that contains the caller. + This is the file path at the time of compile. + + + + Identities the iterator state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Threading.Tasks.dll b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Threading.Tasks.dll new file mode 100644 index 0000000..74f5e2c Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Threading.Tasks.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Threading.Tasks.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Threading.Tasks.xml new file mode 100644 index 0000000..6c77012 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/System.Threading.Tasks.xml @@ -0,0 +1,8969 @@ + + + + System.Threading.Tasks + + + + Represents one or more errors that occur during application execution. + + is used to consolidate multiple failures into a single, throwable + exception object. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error + message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + The argument + is null. + + + + Initializes a new instance of the class with + references to the inner exceptions that are the cause of this exception. + + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with + references to the inner exceptions that are the cause of this exception. + + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with a specified error + message and references to the inner exceptions that are the cause of this exception. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with a specified error + message and references to the inner exceptions that are the cause of this exception. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Allocates a new aggregate exception with the specified message and list of inner exceptions. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Returns the that is the root cause of this exception. + + + + + Invokes a handler on each contained by this . + + The predicate to execute for each exception. The predicate accepts as an + argument the to be processed and returns a Boolean to indicate + whether the exception was handled. + + Each invocation of the returns true or false to indicate whether the + was handled. After all invocations, if any exceptions went + unhandled, all unhandled exceptions will be put into a new + which will be thrown. Otherwise, the method simply returns. If any + invocations of the throws an exception, it will halt the processing + of any more exceptions and immediately propagate the thrown exception as-is. + + An exception contained by this was not handled. + The argument is + null. + + + + Flattens an instances into a single, new instance. + + A new, flattened . + + If any inner exceptions are themselves instances of + , this method will recursively flatten all of them. The + inner exceptions returned in the new + will be the union of all of the the inner exceptions from exception tree rooted at the provided + instance. + + + + + Creates and returns a string representation of the current . + + A string representation of the current exception. + + + + Gets a read-only collection of the instances that caused the + current exception. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to One or more errors occurred.. + + + + + Looks up a localized string similar to An element of innerExceptions was null.. + + + + + Looks up a localized string similar to {0}{1}---> (Inner Exception #{2}) {3}{4}{5}. + + + + + Looks up a localized string similar to No tokens were supplied.. + + + + + Looks up a localized string similar to The CancellationTokenSource associated with this CancellationToken has been disposed.. + + + + + Looks up a localized string similar to The CancellationTokenSource has been disposed.. + + + + + Looks up a localized string similar to The SyncRoot property may not be used for the synchronization of concurrent collections.. + + + + + Looks up a localized string similar to The array is multidimensional, or the type parameter for the set cannot be cast automatically to the type of the destination array.. + + + + + Looks up a localized string similar to The index is equal to or greater than the length of the array, or the number of elements in the dictionary is greater than the available space from index to the end of the destination array.. + + + + + Looks up a localized string similar to The capacity argument must be greater than or equal to zero.. + + + + + Looks up a localized string similar to The concurrencyLevel argument must be positive.. + + + + + Looks up a localized string similar to The index argument is less than zero.. + + + + + Looks up a localized string similar to TKey is a reference type and item.Key is null.. + + + + + Looks up a localized string similar to The key already existed in the dictionary.. + + + + + Looks up a localized string similar to The source argument contains duplicate keys.. + + + + + Looks up a localized string similar to The key was of an incorrect type for this dictionary.. + + + + + Looks up a localized string similar to The value was of an incorrect type for this dictionary.. + + + + + Looks up a localized string similar to The lazily-initialized type does not have a public, parameterless constructor.. + + + + + Looks up a localized string similar to ValueFactory returned null.. + + + + + Looks up a localized string similar to The spinCount argument must be in the range 0 to {0}, inclusive.. + + + + + Looks up a localized string similar to There are too many threads currently waiting on the event. A maximum of {0} waiting threads are supported.. + + + + + Looks up a localized string similar to The event has been disposed.. + + + + + Looks up a localized string similar to The operation was canceled.. + + + + + Looks up a localized string similar to The condition argument is null.. + + + + + Looks up a localized string similar to The timeout must represent a value between -1 and Int32.MaxValue, inclusive.. + + + + + Looks up a localized string similar to The specified TaskContinuationOptions combined LongRunning and ExecuteSynchronously. Synchronous continuations should not be long running.. + + + + + Looks up a localized string similar to The specified TaskContinuationOptions excluded all continuation kinds.. + + + + + Looks up a localized string similar to (Internal)An attempt was made to create a LongRunning SelfReplicating task.. + + + + + Looks up a localized string similar to The value needs to translate in milliseconds to -1 (signifying an infinite timeout), 0 or a positive integer less than or equal to Int32.MaxValue.. + + + + + Looks up a localized string similar to The value needs to be either -1 (signifying an infinite timeout), 0 or a positive integer.. + + + + + Looks up a localized string similar to A task may only be disposed if it is in a completion state (RanToCompletion, Faulted or Canceled).. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.LongRunning in calls to FromAsync.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.PreferFairness in calls to FromAsync.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.SelfReplicating in calls to FromAsync.. + + + + + Looks up a localized string similar to FromAsync was called with a TaskManager that had already shut down.. + + + + + Looks up a localized string similar to The tasks argument contains no tasks.. + + + + + Looks up a localized string similar to It is invalid to exclude specific continuation kinds for continuations off of multiple tasks.. + + + + + Looks up a localized string similar to The tasks argument included a null value.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task that was already started.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a continuation task.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task not bound to a delegate, such as the task returned from an asynchronous method.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task that has already completed.. + + + + + Looks up a localized string similar to Start may not be called on a task that was already started.. + + + + + Looks up a localized string similar to Start may not be called on a continuation task.. + + + + + Looks up a localized string similar to Start may not be called on a task with null action.. + + + + + Looks up a localized string similar to Start may not be called on a promise-style task.. + + + + + Looks up a localized string similar to Start may not be called on a task that has completed.. + + + + + Looks up a localized string similar to The task has been disposed.. + + + + + Looks up a localized string similar to The tasks array included at least one null element.. + + + + + Looks up a localized string similar to The awaited task has not yet completed.. + + + + + Looks up a localized string similar to A task was canceled.. + + + + + Looks up a localized string similar to The exceptions collection was empty.. + + + + + Looks up a localized string similar to The exceptions collection included at least one null element.. + + + + + Looks up a localized string similar to A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread.. + + + + + Looks up a localized string similar to (Internal)Expected an Exception or an IEnumerable<Exception>. + + + + + Looks up a localized string similar to ExecuteTask may not be called for a task which was already executed.. + + + + + Looks up a localized string similar to ExecuteTask may not be called for a task which was previously queued to a different TaskScheduler.. + + + + + Looks up a localized string similar to The current SynchronizationContext may not be used as a TaskScheduler.. + + + + + Looks up a localized string similar to The TryExecuteTaskInline call to the underlying scheduler succeeded, but the task body was not invoked.. + + + + + Looks up a localized string similar to An exception was thrown by a TaskScheduler.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.SelfReplicating for a Task<TResult>.. + + + + + Looks up a localized string similar to {Not yet computed}. + + + + + Looks up a localized string similar to A task's Exception may only be set directly if the task was created without a function.. + + + + + Looks up a localized string similar to An attempt was made to transition a task to a final state when it had already completed.. + + + + + Represents a thread-safe collection of keys and values. + + The type of the keys in the dictionary. + The type of the values in the dictionary. + + All public and protected members of are thread-safe and may be used + concurrently from multiple threads. + + + + + Initializes a new instance of the + class that is empty, has the default concurrency level, has the default initial capacity, and + uses the default comparer for the key type. + + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level and capacity, and uses the default + comparer for the key type. + + The estimated number of threads that will update the + concurrently. + The initial number of elements that the + can contain. + is + less than 1. + is less than + 0. + + + + Initializes a new instance of the + class that contains elements copied from the specified , has the default concurrency + level, has the default initial capacity, and uses the default comparer for the key type. + + The whose elements are copied to + the new + . + is a null reference + (Nothing in Visual Basic). + contains one or more + duplicate keys. + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level and capacity, and uses the specified + . + + The + implementation to use when comparing keys. + is a null reference + (Nothing in Visual Basic). + + + + Initializes a new instance of the + class that contains elements copied from the specified , has the default concurrency level, has the default + initial capacity, and uses the specified + . + + The whose elements are copied to + the new + . + The + implementation to use when comparing keys. + is a null reference + (Nothing in Visual Basic). -or- + is a null reference (Nothing in Visual Basic). + + + + + Initializes a new instance of the + class that contains elements copied from the specified , + has the specified concurrency level, has the specified initial capacity, and uses the specified + . + + The estimated number of threads that will update the + concurrently. + The whose elements are copied to the new + . + The implementation to use + when comparing keys. + + is a null reference (Nothing in Visual Basic). + -or- + is a null reference (Nothing in Visual Basic). + + + is less than 1. + + contains one or more duplicate keys. + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level, has the specified initial capacity, and + uses the specified . + + The estimated number of threads that will update the + concurrently. + The initial number of elements that the + can contain. + The + implementation to use when comparing keys. + + is less than 1. -or- + is less than 0. + + is a null reference + (Nothing in Visual Basic). + + + + Attempts to add the specified key and value to the . + + The key of the element to add. + The value of the element to add. The value can be a null reference (Nothing + in Visual Basic) for reference types. + true if the key/value pair was added to the + successfully; otherwise, false. + is null reference + (Nothing in Visual Basic). + The + contains too many elements. + + + + Determines whether the contains the specified + key. + + The key to locate in the . + true if the contains an element with + the specified key; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Attempts to remove and return the the value with the specified key from the + . + + The key of the element to remove and return. + When this method returns, contains the object removed from the + or the default value of + if the operation failed. + true if an object was removed successfully; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Removes the specified key from the dictionary if it exists and returns its associated value. + If matchValue flag is set, the key will be removed only if is associated with a particular + value. + + The key to search for and remove if it exists. + The variable into which the removed value, if found, is stored. + Whether removal of the key is conditional on its value. + The conditional value to compare against if is true + + + + + Attempts to get the value associated with the specified key from the . + + The key of the value to get. + When this method returns, contains the object from + the + with the spedified key or the default value of + , if the operation failed. + true if the key was found in the ; + otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Compares the existing value for the specified key with a specified value, and if they’re equal, + updates the key with a third value. + + The key whose value is compared with and + possibly replaced. + The value that replaces the value of the element with if the comparison results in equality. + The value that is compared to the value of the element with + . + true if the value with was equal to and replaced with ; otherwise, + false. + is a null + reference. + + + + Removes all keys and values from the . + + + + + Copies the elements of the to an array of + type , starting at the + specified array index. + + The one-dimensional array of type + that is the destination of the elements copied from the . The array must have zero-based indexing. + The zero-based index in at which copying + begins. + is a null reference + (Nothing in Visual Basic). + is less than + 0. + is equal to or greater than + the length of the . -or- The number of elements in the source + is greater than the available space from to the end of the destination + . + + + + Copies the key and value pairs stored in the to a + new array. + + A new array containing a snapshot of key and value pairs copied from the . + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToPairs. + + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToEntries. + + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToObjects. + + + + Returns an enumerator that iterates through the . + An enumerator for the . + + The enumerator returned from the dictionary is safe to use concurrently with + reads and writes to the dictionary, however it does not represent a moment-in-time snapshot + of the dictionary. The contents exposed through the enumerator may contain modifications + made to the dictionary after was called. + + + + + Shared internal implementation for inserts and updates. + If key exists, we always return false; and if updateIfExists == true we force update with value; + If key doesn't exist, we always add value and return true; + + + + + Adds a key/value pair to the + if the key does not already exist. + + The key of the element to add. + The function used to generate a value for the key + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The value for the key. This will be either the existing value for the key if the + key is already in the dictionary, or the new value for the key as returned by valueFactory + if the key was not in the dictionary. + + + + Adds a key/value pair to the + if the key does not already exist. + + The key of the element to add. + the value to be added, if the key does not already exist + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The value for the key. This will be either the existing value for the key if the + key is already in the dictionary, or the new value if the key was not in the dictionary. + + + + Adds a key/value pair to the if the key does not already + exist, or updates a key/value pair in the if the key + already exists. + + The key to be added or whose value should be updated + The function used to generate a value for an absent key + The function used to generate a new value for an existing key + based on the key's existing value + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The new value for the key. This will be either be the result of addValueFactory (if the key was + absent) or the result of updateValueFactory (if the key was present). + + + + Adds a key/value pair to the if the key does not already + exist, or updates a key/value pair in the if the key + already exists. + + The key to be added or whose value should be updated + The value to be added for an absent key + The function used to generate a new value for an existing key based on + the key's existing value + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The new value for the key. This will be either be the result of addValueFactory (if the key was + absent) or the result of updateValueFactory (if the key was present). + + + + Adds the specified key and value to the . + + The object to use as the key of the element to add. + The object to use as the value of the element to add. + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + + An element with the same key already exists in the . + + + + Removes the element with the specified key from the . + + The key of the element to remove. + true if the element is successfully remove; otherwise false. This method also returns + false if + was not found in the original . + + is a null reference + (Nothing in Visual Basic). + + + + Adds the specified value to the + with the specified key. + + The + structure representing the key and value to add to the . + The of is null. + The + contains too many elements. + An element with the same key already exists in the + + + + + Determines whether the + contains a specific key and value. + + The + structure to locate in the . + true if the is found in the ; otherwise, false. + + + + Removes a key and value from the dictionary. + + The + structure representing the key and value to remove from the . + true if the key and value represented by is successfully + found and removed; otherwise, false. + The Key property of is a null reference (Nothing in Visual Basic). + + + Returns an enumerator that iterates through the . + An enumerator for the . + + The enumerator returned from the dictionary is safe to use concurrently with + reads and writes to the dictionary, however it does not represent a moment-in-time snapshot + of the dictionary. The contents exposed through the enumerator may contain modifications + made to the dictionary after was called. + + + + + Adds the specified key and value to the dictionary. + + The object to use as the key. + The object to use as the value. + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + + is of a type that is not assignable to the key type of the . -or- + is of a type that is not assignable to , + the type of values in the . + -or- A value with the same key already exists in the . + + + + + Gets whether the contains an + element with the specified key. + + The key to locate in the . + true if the contains + an element with the specified key; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + Provides an for the + . + An for the . + + + + Removes the element with the specified key from the . + + The key of the element to remove. + is a null reference + (Nothing in Visual Basic). + + + + Copies the elements of the to an array, starting + at the specified array index. + + The one-dimensional array that is the destination of the elements copied from + the . The array must have zero-based + indexing. + The zero-based index in at which copying + begins. + is a null reference + (Nothing in Visual Basic). + is less than + 0. + is equal to or greater than + the length of the . -or- The number of elements in the source + is greater than the available space from to the end of the destination + . + + + + Replaces the internal table with a larger one. To prevent multiple threads from resizing the + table as a result of races, the table of buckets that was deemed too small is passed in as + an argument to GrowTable(). GrowTable() obtains a lock, and then checks whether the bucket + table has been replaced in the meantime or not. + + Reference to the bucket table that was deemed too small. + + + + Computes the bucket and lock number for a particular key. + + + + + Acquires all locks for this hash table, and increments locksAcquired by the number + of locks that were successfully acquired. The locks are acquired in an increasing + order. + + + + + Acquires a contiguous range of locks for this hash table, and increments locksAcquired + by the number of locks that were successfully acquired. The locks are acquired in an + increasing order. + + + + + Releases a contiguous range of locks. + + + + + Gets a collection containing the keys in the dictionary. + + + + + Gets a collection containing the values in the dictionary. + + + + + A helper method for asserts. + + + + + Get the data array to be serialized + + + + + Construct the dictionary from a previously seiralized one + + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key. If the specified key is not found, a get + operation throws a + , and a set operation creates a new + element with the specified key. + is a null reference + (Nothing in Visual Basic). + The property is retrieved and + + does not exist in the collection. + + + + Gets the number of key/value pairs contained in the . + + The dictionary contains too many + elements. + The number of key/value paris contained in the . + Count has snapshot semantics and represents the number of items in the + at the moment when Count was accessed. + + + + Gets a value that indicates whether the is empty. + + true if the is empty; otherwise, + false. + + + + Gets a collection containing the keys in the . + + An containing the keys in the + . + + + + Gets a collection containing the values in the . + + An containing the values in + the + . + + + + Gets a value indicating whether the dictionary is read-only. + + true if the is + read-only; otherwise, false. For , this property always returns + false. + + + + Gets a value indicating whether the has a fixed size. + + true if the has a + fixed size; otherwise, false. For , this property always + returns false. + + + + Gets a value indicating whether the is read-only. + + true if the is + read-only; otherwise, false. For , this property always + returns false. + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + + Gets an containing the values in the . + + An containing the values in the . + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key, or a null reference (Nothing in Visual Basic) + if is not in the dictionary or is of a type that is + not assignable to the key type of the . + is a null reference + (Nothing in Visual Basic). + + A value is being assigned, and is of a type that is not assignable to the + key type of the . -or- A value is being + assigned, and is of a type that is not assignable to the value type + of the + + + + + Gets a value indicating whether access to the is + synchronized with the SyncRoot. + + true if access to the is synchronized + (thread safe); otherwise, false. For , this property always + returns false. + + + + Gets an object that can be used to synchronize access to the . This property is not supported. + + The SyncRoot property is not supported. + + + + The number of concurrent writes for which to optimize by default. + + + + + A node in a singly-linked list representing a particular hash table bucket. + + + + + A private class to represent enumeration over the dictionary that implements the + IDictionaryEnumerator interface. + + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + Represents an asynchronous method builder. + + + A cached VoidTaskResult task used for builders that complete synchronously. + + + The generic builder object to which this non-generic instance delegates. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state. + + The builder is not initialized. + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + + Gets the for this builder. + The representing the builder's asynchronous operation. + The builder is not initialized. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + Holds state related to the builder's IAsyncStateMachine. + This is a mutable struct. Be very delicate with it. + + + A reference to the heap-allocated state machine object associated with this builder. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument is null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + + Gets the Action to use with an awaiter's OnCompleted or UnsafeOnCompleted method. + On first invocation, the supplied state machine will be boxed. + + Specifies the type of the method builder used. + Specifies the type of the state machine used. + The builder. + The state machine. + An Action to provide to the awaiter. + + + Provides the ability to invoke a state machine's MoveNext method under a supplied ExecutionContext. + + + The context with which to run MoveNext. + + + The state machine whose MoveNext method should be invoked. + + + Initializes the runner. + The context with which to run MoveNext. + + + Invokes MoveNext under the provided context. + + + Cached delegate used with ExecutionContext.Run. + + + Invokes the MoveNext method on the supplied IAsyncStateMachine. + The IAsyncStateMachine machine instance. + + + + Provides a builder for asynchronous methods that return void. + This type is intended for compiler use only. + + + + The synchronization context associated with this operation. + + + State related to the IAsyncStateMachine. + + + An object used by the debugger to uniquely identify this builder. Lazily initialized. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Registers with UnobservedTaskException to suppress exception crashing. + + + Non-zero if PreventUnobservedTaskExceptions has already been invoked. + + + Initializes a new . + The initialized . + + + Initializes the . + The synchronizationContext associated with this operation. This may be null. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument was null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + Completes the method builder successfully. + + + Faults the method builder with an exception. + The exception that is the cause of this fault. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + + + Notifies the current synchronization context that the operation completed. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger and only in a single-threaded manner. + + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder{TResult} is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + A cached task for default(TResult). + + + State related to the IAsyncStateMachine. + + + The lazily-initialized task. + Must be named m_task for debugger step-over to work correctly. + + + The lazily-initialized task completion source. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state with the specified result. + + The result to use to complete the task. + The task has already completed. + + + + Completes the builder by using either the supplied completed task, or by completing + the builder's previously accessed task using default(TResult). + + A task already completed with the value default(TResult). + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + This should only be invoked from within an asynchronous method, + and only by the debugger. + + + + + Gets a task for the specified result. This will either + be a cached or new task, never null. + + The result for which we need a task. + The completed task containing the result. + + + Gets the lazily-initialized TaskCompletionSource. + + + Gets the for this builder. + The representing the builder's asynchronous operation. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + Provides a base class used to cache tasks of a specific return type. + Specifies the type of results the cached tasks return. + + + + A singleton cache for this result type. + This may be null if there are no cached tasks for this TResult. + + + + Creates a non-disposable task. + The result for the task. + The cacheable task. + + + Creates a cache. + A task cache for this result type. + + + Gets a cached task if one exists. + The result for which we want a cached task. + A cached task if one exists; otherwise, null. + + + Provides a cache for Boolean tasks. + + + A true task. + + + A false task. + + + Gets a cached task for the Boolean result. + true or false + A cached task for the Boolean result. + + + Provides a cache for zero Int32 tasks. + + + The minimum value, inclusive, for which we want a cached task. + + + The maximum value, exclusive, for which we want a cached task. + + + The cache of Task{Int32}. + + + Creates an array of cached tasks for the values in the range [INCLUSIVE_MIN,EXCLUSIVE_MAX). + + + Gets a cached task for the zero Int32 result. + The integer value + A cached task for the Int32 result or null if not cached. + + + + Represents state machines generated for asynchronous methods. + This type is intended for compiler use only. + + + + Moves the state machine to its next state. + + + Configures the state machine with a heap-allocated replica. + The heap-allocated replica. + + + + Represents an awaiter used to schedule continuations when an await operation completes. + + + + + Represents an operation that will schedule continuations when the operation completes. + + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + Unlike OnCompleted, UnsafeOnCompleted need not propagate ExecutionContext information. + + + Used with Task(of void) + + + + An interface similar to the one added in .NET 4.0. + + + + The exception that is thrown in a thread upon cancellation of an operation that the thread was executing. + + + Initializes the exception. + + + Initializes the exception. + The error message that explains the reason for the exception. + + + Initializes the exception. + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + Initializes the exception. + A cancellation token associated with the operation that was canceled. + + + Initializes the exception. + The error message that explains the reason for the exception. + A cancellation token associated with the operation that was canceled. + + + Initializes the exception. + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + A cancellation token associated with the operation that was canceled. + + + Gets a token associated with the operation that was canceled. + + + + A dummy replacement for the .NET internal class StackCrawlMark. + + + + + Propogates notification that operations should be canceled. + + + + A may be created directly in an unchangeable canceled or non-canceled state + using the CancellationToken's constructors. However, to have a CancellationToken that can change + from a non-canceled to a canceled state, + CancellationTokenSource must be used. + CancellationTokenSource exposes the associated CancellationToken that may be canceled by the source through its + Token property. + + + Once canceled, a token may not transition to a non-canceled state, and a token whose + is false will never change to one that can be canceled. + + + All members of this struct are thread-safe and may be used concurrently from multiple threads. + + + + + + Internal constructor only a CancellationTokenSource should create a CancellationToken + + + + + Initializes the CancellationToken. + + + The canceled state for the token. + + + Tokens created with this constructor will remain in the canceled state specified + by the parameter. If is false, + both and will be false. + If is true, + both and will be true. + + + + + Registers a delegate that will be called when this CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + A Boolean value that indicates whether to capture + the current SynchronizationContext and use it + when invoking the . + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The state to pass to the when the delegate is invoked. This may be null. + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The state to pass to the when the delegate is invoked. This may be null. + A Boolean value that indicates whether to capture + the current SynchronizationContext and use it + when invoking the . + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Determines whether the current CancellationToken instance is equal to the + specified token. + + The other CancellationToken to which to compare this + instance. + True if the instances are equal; otherwise, false. Two tokens are equal if they are associated + with the same CancellationTokenSource or if they were both constructed + from public CancellationToken constructors and their values are equal. + + + + Determines whether the current CancellationToken instance is equal to the + specified . + + The other object to which to compare this instance. + True if is a CancellationToken + and if the two instances are equal; otherwise, false. Two tokens are equal if they are associated + with the same CancellationTokenSource or if they were both constructed + from public CancellationToken constructors and their values are equal. + An associated CancellationTokenSource has been disposed. + + + + Serves as a hash function for a CancellationToken. + + A hash code for the current CancellationToken instance. + + + + Determines whether two CancellationToken instances are equal. + + The first instance. + The second instance. + True if the instances are equal; otherwise, false. + An associated CancellationTokenSource has been disposed. + + + + Determines whether two CancellationToken instances are not equal. + + The first instance. + The second instance. + True if the instances are not equal; otherwise, false. + An associated CancellationTokenSource has been disposed. + + + + Throws a OperationCanceledException if + this token has had cancellation requested. + + + This method provides functionality equivalent to: + + if (token.IsCancellationRequested) + throw new OperationCanceledException(token); + + + The token has had cancellation requested. + The associated CancellationTokenSource has been disposed. + + + + Returns an empty CancellationToken value. + + + The value returned by this property will be non-cancelable by default. + + + + + Gets whether cancellation has been requested for this token. + + Whether cancellation has been requested for this token. + + + This property indicates whether cancellation has been requested for this token, + either through the token initially being construted in a canceled state, or through + calling Cancel + on the token's associated . + + + If this property is true, it only guarantees that cancellation has been requested. + It does not guarantee that every registered handler + has finished executing, nor that cancellation requests have finished propagating + to all registered handlers. Additional synchronization may be required, + particularly in situations where related objects are being canceled concurrently. + + + + + + Gets whether this token is capable of being in the canceled state. + + + If CanBeCanceled returns false, it is guaranteed that the token will never transition + into a canceled state, meaning that will never + return true. + + + + + Gets a that is signaled when the token is canceled. + + Accessing this property causes a WaitHandle + to be instantiated. It is preferable to only use this property when necessary, and to then + dispose the associated instance at the earliest opportunity (disposing + the source will dispose of this allocated handle). The handle should not be closed or disposed directly. + + The associated CancellationTokenSource has been disposed. + + + + Represents a callback delegate that has been registered with a CancellationToken. + + + To unregister a callback, dispose the corresponding Registration instance. + + + + + Attempts to deregister the item. If it's already being run, this may fail. + Entails a full memory fence. + + True if the callback was found and deregistered, false otherwise. + + + + Disposes of the registration and unregisters the target callback from the associated + CancellationToken. + If the target callback is currently executing this method will wait until it completes, except + in the degenerate cases where a callback method deregisters itself. + + + + + Determines whether two CancellationTokenRegistration + instances are equal. + + The first instance. + The second instance. + True if the instances are equal; otherwise, false. + + + + Determines whether two CancellationTokenRegistration instances are not equal. + + The first instance. + The second instance. + True if the instances are not equal; otherwise, false. + + + + Determines whether the current CancellationTokenRegistration instance is equal to the + specified . + + The other object to which to compare this instance. + True, if both this and are equal. False, otherwise. + Two CancellationTokenRegistration instances are equal if + they both refer to the output of a single call to the same Register method of a + CancellationToken. + + + + + Determines whether the current CancellationToken instance is equal to the + specified . + + The other CancellationTokenRegistration to which to compare this instance. + True, if both this and are equal. False, otherwise. + Two CancellationTokenRegistration instances are equal if + they both refer to the output of a single call to the same Register method of a + CancellationToken. + + + + + Serves as a hash function for a CancellationTokenRegistration.. + + A hash code for the current CancellationTokenRegistration instance. + + + + Signals to a that it should be canceled. + + + + is used to instantiate a + (via the source's Token property) + that can be handed to operations that wish to be notified of cancellation or that can be used to + register asynchronous operations for cancellation. That token may have cancellation requested by + calling to the source's Cancel + method. + + + All members of this class, except Dispose, are thread-safe and may be used + concurrently from multiple threads. + + + + + The ID of the thread currently executing the main body of CTS.Cancel() + this helps us to know if a call to ctr.Dispose() is running 'within' a cancellation callback. + This is updated as we move between the main thread calling cts.Cancel() and any syncContexts that are used to + actually run the callbacks. + + + + Initializes the . + + + + + Communicates a request for cancellation. + + + + The associated will be + notified of the cancellation and will transition to a state where + IsCancellationRequested returns true. + Any callbacks or cancelable operations + registered with the will be executed. + + + Cancelable operations and callbacks registered with the token should not throw exceptions. + However, this overload of Cancel will aggregate any exceptions thrown into a , + such that one callback throwing an exception will not prevent other registered callbacks from being executed. + + + The that was captured when each callback was registered + will be reestablished when the callback is invoked. + + + An aggregate exception containing all the exceptions thrown + by the registered callbacks on the associated . + This has been disposed. + + + + Communicates a request for cancellation. + + + + The associated will be + notified of the cancellation and will transition to a state where + IsCancellationRequested returns true. + Any callbacks or cancelable operations + registered with the will be executed. + + + Cancelable operations and callbacks registered with the token should not throw exceptions. + If is true, an exception will immediately propagate out of the + call to Cancel, preventing the remaining callbacks and cancelable operations from being processed. + If is false, this overload will aggregate any + exceptions thrown into a , + such that one callback throwing an exception will not prevent other registered callbacks from being executed. + + + The that was captured when each callback was registered + will be reestablished when the callback is invoked. + + + Specifies whether exceptions should immediately propagate. + An aggregate exception containing all the exceptions thrown + by the registered callbacks on the associated . + This has been disposed. + + + + Releases the resources used by this . + + + This method is not thread-safe for any other concurrent calls. + + + + + Throws an exception if the source has been disposed. + + + + + InternalGetStaticSource() + + Whether the source should be set. + A static source to be shared among multiple tokens. + + + + Registers a callback object. If cancellation has already occurred, the + callback will have been run by the time this method returns. + + + + + + + + + + Invoke the Canceled event. + + + The handlers are invoked synchronously in LIFO order. + + + + + Creates a CancellationTokenSource that will be in the canceled state + when any of the source tokens are in the canceled state. + + The first CancellationToken to observe. + The second CancellationToken to observe. + A CancellationTokenSource that is linked + to the source tokens. + A CancellationTokenSource associated with + one of the source tokens has been disposed. + + + + Creates a CancellationTokenSource that will be in the canceled state + when any of the source tokens are in the canceled state. + + The CancellationToken instances to observe. + A CancellationTokenSource that is linked + to the source tokens. + is null. + A CancellationTokenSource associated with + one of the source tokens has been disposed. + + + + Gets whether cancellation has been requested for this CancellationTokenSource. + + Whether cancellation has been requested for this CancellationTokenSource. + + + This property indicates whether cancellation has been requested for this token source, such as + due to a call to its + Cancel method. + + + If this property returns true, it only guarantees that cancellation has been requested. It does not + guarantee that every handler registered with the corresponding token has finished executing, nor + that cancellation requests have finished propagating to all registered handlers. Additional + synchronization may be required, particularly in situations where related objects are being + canceled concurrently. + + + + + + A simple helper to determine whether cancellation has finished. + + + + + A simple helper to determine whether disposal has occured. + + + + + The ID of the thread that is running callbacks. + + + + + Gets the CancellationToken + associated with this . + + The CancellationToken + associated with this . + The token source has been + disposed. + + + + + + + + + + + + + + The currently executing callback + + + + + A helper class for collating the various bits of information required to execute + cancellation callbacks. + + + + + InternalExecuteCallbackSynchronously_GeneralPath + This will be called on the target synchronization context, however, we still need to restore the required execution context + + + + + A sparsely populated array. Elements can be sparse and some null, but this allows for + lock-free additions and growth, and also for constant time removal (by nulling out). + + The kind of elements contained within. + + + + Allocates a new array with the given initial size. + + How many array slots to pre-allocate. + + + + Adds an element in the first available slot, beginning the search from the tail-to-head. + If no slots are available, the array is grown. The method doesn't return until successful. + + The element to add. + Information about where the add happened, to enable O(1) deregistration. + + + + The tail of the doubly linked list. + + + + + A struct to hold a link to the exact spot in an array an element was inserted, enabling + constant time removal later on. + + + + + A fragment of a sparsely populated array, doubly linked. + + The kind of elements contained within. + + + + Provides lazy initialization routines. + + + These routines avoid needing to allocate a dedicated, lazy-initialization instance, instead using + references to ensure targets have been initialized as they are accessed. + + + + + Initializes a target reference type with the type's default constructor if the target has not + already been initialized. + + The refence type of the reference to be initialized. + A reference of type to initialize if it has not + already been initialized. + The initialized reference of type . + Type does not have a default + constructor. + + Permissions to access the constructor of type were missing. + + + + This method may only be used on reference types. To ensure initialization of value + types, see other overloads of EnsureInitialized. + + + This method may be used concurrently by multiple threads to initialize . + In the event that multiple threads access this method concurrently, multiple instances of + may be created, but only one will be stored into . In such an occurrence, this method will not dispose of the + objects that were not stored. If such objects must be disposed, it is up to the caller to determine + if an object was not used and to then dispose of the object appropriately. + + + + + + Initializes a target reference type using the specified function if it has not already been + initialized. + + The reference type of the reference to be initialized. + The reference of type to initialize if it has not + already been initialized. + The invoked to initialize the + reference. + The initialized reference of type . + Type does not have a + default constructor. + returned + null. + + + This method may only be used on reference types, and may + not return a null reference (Nothing in Visual Basic). To ensure initialization of value types or + to allow null reference types, see other overloads of EnsureInitialized. + + + This method may be used concurrently by multiple threads to initialize . + In the event that multiple threads access this method concurrently, multiple instances of + may be created, but only one will be stored into . In such an occurrence, this method will not dispose of the + objects that were not stored. If such objects must be disposed, it is up to the caller to determine + if an object was not used and to then dispose of the object appropriately. + + + + + + Initialize the target using the given delegate (slow path). + + The reference type of the reference to be initialized. + The variable that need to be initialized + The delegate that will be executed to initialize the target + The initialized variable + + + + Initializes a target reference or value type with its default constructor if it has not already + been initialized. + + The type of the reference to be initialized. + A reference or value of type to initialize if it + has not already been initialized. + A reference to a boolean that determines whether the target has already + been initialized. + A reference to an object used as the mutually exclusive lock for initializing + . + The initialized value of type . + + + + Initializes a target reference or value type with a specified function if it has not already been + initialized. + + The type of the reference to be initialized. + A reference or value of type to initialize if it + has not already been initialized. + A reference to a boolean that determines whether the target has already + been initialized. + A reference to an object used as the mutually exclusive lock for initializing + . + The invoked to initialize the + reference or value. + The initialized value of type . + + + + Ensure the target is initialized and return the value (slow path). This overload permits nulls + and also works for value type targets. Uses the supplied function to create the value. + + The type of target. + A reference to the target to be initialized. + A reference to a location tracking whether the target has been initialized. + A reference to a location containing a mutual exclusive lock. + + The to invoke in order to produce the lazily-initialized value. + + The initialized object. + + + + Provides a slimmed down version of . + + + All public and protected members of are thread-safe and may be used + concurrently from multiple threads, with the exception of Dispose, which + must only be used when all other operations on the have + completed, and Reset, which should only be used when no other threads are + accessing the event. + + + + + Initializes a new instance of the + class with an initial state of nonsignaled. + + + + + Initializes a new instance of the + class with a Boolen value indicating whether to set the intial state to signaled. + + true to set the initial state signaled; false to set the initial state + to nonsignaled. + + + + Initializes a new instance of the + class with a Boolen value indicating whether to set the intial state to signaled and a specified + spin count. + + true to set the initial state to signaled; false to set the initial state + to nonsignaled. + The number of spin waits that will occur before falling back to a true + wait. + is less than + 0 or greater than the maximum allowed value. + + + + Initializes the internal state of the event. + + Whether the event is set initially or not. + The spin count that decides when the event will block. + + + + Helper to ensure the lock object is created before first use. + + + + + This method lazily initializes the event object. It uses CAS to guarantee that + many threads racing to call this at once don't result in more than one event + being stored and used. The event will be signaled or unsignaled depending on + the state of the thin-event itself, with synchronization taken into account. + + True if a new event was created and stored, false otherwise. + + + + Sets the state of the event to signaled, which allows one or more threads waiting on the event to + proceed. + + + + + Private helper to actually perform the Set. + + Indicates whether we are calling Set() during cancellation. + The object has been canceled. + + + + Sets the state of the event to nonsignaled, which causes threads to block. + + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + Blocks the current thread until the current is set. + + + The maximum number of waiters has been exceeded. + + + The caller of this method blocks indefinitely until the current instance is set. The caller will + return immediately if the event is currently in a set state. + + + + + Blocks the current thread until the current receives a signal, + while observing a . + + The to + observe. + + The maximum number of waiters has been exceeded. + + was + canceled. + + The caller of this method blocks indefinitely until the current instance is set. The caller will + return immediately if the event is currently in a set state. + + + + + Blocks the current thread until the current is set, using a + to measure the time interval. + + A that represents the number of milliseconds + to wait, or a that represents -1 milliseconds to wait indefinitely. + + true if the was set; otherwise, + false. + is a negative + number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater + than . + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + to measure the time interval, while observing a . + + A that represents the number of milliseconds + to wait, or a that represents -1 milliseconds to wait indefinitely. + + The to + observe. + true if the was set; otherwise, + false. + is a negative + number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater + than . + was canceled. + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + 32-bit signed integer to measure the time interval. + + The number of milliseconds to wait, or (-1) to wait indefinitely. + true if the was set; otherwise, + false. + is a + negative number other than -1, which represents an infinite time-out. + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + 32-bit signed integer to measure the time interval, while observing a . + + The number of milliseconds to wait, or (-1) to wait indefinitely. + The to + observe. + true if the was set; otherwise, + false. + is a + negative number other than -1, which represents an infinite time-out. + + The maximum number of waiters has been exceeded. + + was canceled. + + + + Releases all resources used by the current instance of . + + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + When overridden in a derived class, releases the unmanaged resources used by the + , and optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only unmanaged resources. + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + Throw ObjectDisposedException if the MRES is disposed + + + + + Private helper method to wake up waiters when a cancellationToken gets canceled. + + + + + Private helper method for updating parts of a bit-string state value. + Mainly called from the IsSet and Waiters properties setters + + + Note: the parameter types must be int as CompareExchange cannot take a Uint + + The new value + The mask used to set the bits + + + + Private helper method - performs Mask and shift, particular helpful to extract a field from a packed word. + eg ExtractStatePortionAndShiftRight(0x12345678, 0xFF000000, 24) => 0x12, ie extracting the top 8-bits as a simple integer + + ?? is there a common place to put this rather than being private to MRES? + + + + + + + + + Performs a Mask operation, but does not perform the shift. + This is acceptable for boolean values for which the shift is unnecessary + eg (val & Mask) != 0 is an appropriate way to extract a boolean rather than using + ((val & Mask) >> shiftAmount) == 1 + + ?? is there a common place to put this rather than being private to MRES? + + + + + + + Helper function to measure and update the wait time + + The first time (in Ticks) observed when the wait started. + The orginal wait timeoutout in milliseconds. + The new wait time in milliseconds, -1 if the time expired, -2 if overflow in counters + has occurred. + + + + Gets the underlying object for this . + + The underlying event object fore this . + + Accessing this property forces initialization of an underlying event object if one hasn't + already been created. To simply wait on this , + the public Wait methods should be preferred. + + + + + Gets whether the event is set. + + true if the event has is set; otherwise, false. + + + + Gets the number of spin waits that will be occur before falling back to a true wait. + + + + + How many threads are waiting. + + + + + Provides support for spin-based waiting. + + + + encapsulates common spinning logic. On single-processor machines, yields are + always used instead of busy waits, and on computers with Intel™ processors employing Hyper-Threading™ + technology, it helps to prevent hardware thread starvation. SpinWait encapsulates a good mixture of + spinning and true yielding. + + + is a value type, which means that low-level code can utilize SpinWait without + fear of unnecessary allocation overheads. SpinWait is not generally useful for ordinary applications. + In most cases, you should use the synchronization classes provided by the .NET Framework, such as + . For most purposes where spin waiting is required, however, + the type should be preferred over the System.Threading.Thread.SpinWait method. + + + While SpinWait is designed to be used in concurrent applications, it is not designed to be + used from multiple threads concurrently. SpinWait's members are not thread-safe. If multiple + threads must spin, each should use its own instance of SpinWait. + + + + + + Performs a single spin. + + + This is typically called in a loop, and may change in behavior based on the number of times a + has been called thus far on this instance. + + + + + Resets the spin counter. + + + This makes and behave as though no calls + to had been issued on this instance. If a instance + is reused many times, it may be useful to reset it to avoid yielding too soon. + + + + + Spins until the specified condition is satisfied. + + A delegate to be executed over and over until it returns true. + The argument is null. + + + + Spins until the specified condition is satisfied or until the specified timeout is expired. + + A delegate to be executed over and over until it returns true. + + A that represents the number of milliseconds to wait, + or a TimeSpan that represents -1 milliseconds to wait indefinitely. + True if the condition is satisfied within the timeout; otherwise, false + The argument is null. + is a negative number + other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater than + . + + + + Spins until the specified condition is satisfied or until the specified timeout is expired. + + A delegate to be executed over and over until it returns true. + The number of milliseconds to wait, or (-1) to wait indefinitely. + True if the condition is satisfied within the timeout; otherwise, false + The argument is null. + is a + negative number other than -1, which represents an infinite time-out. + + + + Gets the number of times has been called on this instance. + + + + + Gets whether the next call to will yield the processor, triggering a + forced context switch. + + Whether the next call to will yield the processor, triggering a + forced context switch. + + On a single-CPU machine, always yields the processor. On machines with + multiple CPUs, may yield after an unspecified number of calls. + + + + + A helper class to get the number of preocessors, it updates the numbers of processors every sampling interval + + + + + Gets the number of available processors + + + + + Gets whether the current machine has only a single processor. + + + + + Represents an asynchronous operation that produces a result at some time in the future. + + + The type of the result produced by this . + + + + instances may be created in a variety of ways. The most common approach is by + using the task's property to retrieve a instance that can be used to create tasks for several + purposes. For example, to create a that runs a function, the factory's StartNew + method may be used: + + // C# + var t = Task<int>.Factory.StartNew(() => GenerateResult()); + - or - + var t = Task.Factory.StartNew(() => GenerateResult()); + + ' Visual Basic + Dim t = Task<int>.Factory.StartNew(Function() GenerateResult()) + - or - + Dim t = Task.Factory.StartNew(Function() GenerateResult()) + + + + The class also provides constructors that initialize the task but that do not + schedule it for execution. For performance reasons, the StartNew method should be the + preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation + and scheduling must be separated, the constructors may be used, and the task's + Start + method may then be used to schedule the task for execution at a later time. + + + All members of , except for + Dispose, are thread-safe + and may be used from multiple threads concurrently. + + + + + + Represents an asynchronous operation. + + + + instances may be created in a variety of ways. The most common approach is by + using the Task type's property to retrieve a instance that can be used to create tasks for several + purposes. For example, to create a that runs an action, the factory's StartNew + method may be used: + + // C# + var t = Task.Factory.StartNew(() => DoAction()); + + ' Visual Basic + Dim t = Task.Factory.StartNew(Function() DoAction()) + + + + The class also provides constructors that initialize the Task but that do not + schedule it for execution. For performance reasons, TaskFactory's StartNew method should be the + preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation + and scheduling must be separated, the constructors may be used, and the task's + method may then be used to schedule the task for execution at a later time. + + + All members of , except for , are thread-safe + and may be used from multiple threads concurrently. + + + For operations that return values, the class + should be used. + + + For developers implementing custom debuggers, several internal and private members of Task may be + useful (these may change from release to release). The Int32 m_taskId field serves as the backing + store for the property, however accessing this field directly from a debugger may be + more efficient than accessing the same value through the property's getter method (the + s_taskIdCounter Int32 counter is used to retrieve the next available ID for a Task). Similarly, the + Int32 m_stateFlags field stores information about the current lifecycle stage of the Task, + information also accessible through the property. The m_action System.Object + field stores a reference to the Task's delegate, and the m_stateObject System.Object field stores the + async state passed to the Task by the developer. Finally, for debuggers that parse stack frames, the + InternalWait method serves a potential marker for when a Task is entering a wait operation. + + + + + + A type initializer that runs with the appropriate permissions. + + + + + Initializes a new with the specified action. + + The delegate that represents the code to execute in the Task. + The argument is null. + + + + Initializes a new with the specified action and CancellationToken. + + The delegate that represents the code to execute in the Task. + The CancellationToken + that will be assigned to the new Task. + The argument is null. + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action and creation options. + + The delegate that represents the code to execute in the task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action and creation options. + + The delegate that represents the code to execute in the task. + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action and state. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + + The argument is null. + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + The that will be assigned to the new task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + An internal constructor used by the factory methods on task and its descendent(s). + This variant does not capture the ExecutionContext; it is up to the caller to do that. + + An action to execute. + Optional state to pass to the action. + Parent of Task. + A CancellationToken for the task. + A task scheduler under which the task will run. + Options to control its execution. + Internal options to control its execution + + + + Common logic used by the following internal ctors: + Task() + Task(object action, object state, Task parent, TaskCreationOptions options, TaskScheduler taskScheduler) + + ASSUMES THAT m_creatingTask IS ALREADY SET. + + + Action for task to execute. + Object to which to pass to action (may be null) + Task scheduler on which to run thread (only used by continuation tasks). + A CancellationToken for the Task. + Options to customize behavior of Task. + Internal options to customize behavior of Task. + + + + Checks if we registered a CT callback during construction, and deregisters it. + This should be called when we know the registration isn't useful anymore. Specifically from Finish() if the task has completed + successfully or with an exception. + + + + + Captures the ExecutionContext so long as flow isn't suppressed. + + A stack crawl mark pointing to the frame of the caller. + + + + Internal function that will be called by a new child task to add itself to + the children list of the parent (this). + + Since a child task can only be created from the thread executing the action delegate + of this task, reentrancy is neither required nor supported. This should not be called from + anywhere other than the task construction/initialization codepaths. + + + + + Starts the , scheduling it for execution to the current TaskScheduler. + + + A task may only be started and run only once. Any attempts to schedule a task a second time + will result in an exception. + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Starts the , scheduling it for execution to the specified TaskScheduler. + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + The TaskScheduler with which to associate + and execute this task. + + + The argument is null. + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Runs the synchronously on the current TaskScheduler. + + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + Tasks executed with will be associated with the current TaskScheduler. + + + If the target scheduler does not support running this Task on the current thread, the Task will + be scheduled for execution on the scheduler, and the current thread will block until the + Task has completed execution. + + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Runs the synchronously on the scheduler provided. + + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + If the target scheduler does not support running this Task on the current thread, the Task will + be scheduled for execution on the scheduler, and the current thread will block until the + Task has completed execution. + + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + The parameter + is null. + The scheduler on which to attempt to run this task inline. + + + + Throws an exception if the task has been disposed, and hence can no longer be accessed. + + The task has been disposed. + + + + Sets the internal completion event. + + + + + Disposes the , releasing all of its unmanaged resources. + + + Unlike most of the members of , this method is not thread-safe. + Also, may only be called on a that is in one of + the final states: RanToCompletion, + Faulted, or + Canceled. + + + The exception that is thrown if the is not in + one of the final states: RanToCompletion, + Faulted, or + Canceled. + + + + + Disposes the , releasing all of its unmanaged resources. + + + A Boolean value that indicates whether this method is being called due to a call to . + + + Unlike most of the members of , this method is not thread-safe. + + + + + Schedules the task for execution. + + If true, TASK_STATE_STARTED bit is turned on in + an atomic fashion, making sure that TASK_STATE_CANCELED does not get set + underneath us. If false, TASK_STATE_STARTED bit is OR-ed right in. This + allows us to streamline things a bit for StartNew(), where competing cancellations + are not a problem. + + + + Adds an exception to the list of exceptions this task has thrown. + + An object representing either an Exception or a collection of Exceptions. + + + + Returns a list of exceptions by aggregating the holder's contents. Or null if + no exceptions have been thrown. + + Whether to include a TCE if cancelled. + An aggregate exception, or null if no exceptions have been caught. + + + + Throws an aggregate exception if the task contains exceptions. + + + + + Checks whether this is an attached task, and whether we are being called by the parent task. + And sets the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag based on that. + + This is meant to be used internally when throwing an exception, and when WaitAll is gathering + exceptions for tasks it waited on. If this flag gets set, the implicit wait on children + will skip exceptions to prevent duplication. + + This should only be called when this task has completed with an exception + + + + + + Signals completion of this particular task. + + The bUserDelegateExecuted parameter indicates whether this Finish() call comes following the + full execution of the user delegate. + + If bUserDelegateExecuted is false, it mean user delegate wasn't invoked at all (either due to + a cancellation request, or because this task is a promise style Task). In this case, the steps + involving child tasks (i.e. WaitForChildren) will be skipped. + + + + + + FinishStageTwo is to be executed as soon as we known there are no more children to complete. + It can happen i) either on the thread that originally executed this task (if no children were spawned, or they all completed by the time this task's delegate quit) + ii) or on the thread that executed the last child. + + + + + Final stage of the task completion code path. Notifies the parent (if any) that another of its childre are done, and runs continuations. + This function is only separated out from FinishStageTwo because these two operations are also needed to be called from CancellationCleanupLogic() + + + + + This is called by children of this task when they are completed. + + + + + This is to be called just before the task does its final state transition. + It traverses the list of exceptional children, and appends their aggregate exceptions into this one's exception list + + + + + Special purpose Finish() entry point to be used when the task delegate throws a ThreadAbortedException + This makes a note in the state flags so that we avoid any costly synchronous operations in the finish codepath + such as inlined continuations + + + Indicates whether the ThreadAbortException was added to this task's exception holder. + This should always be true except for the case of non-root self replicating task copies. + + Whether the delegate was executed. + + + + Executes the task. This method will only be called once, and handles bookeeping associated with + self-replicating tasks, in addition to performing necessary exception marshaling. + + The task has already been disposed. + + + + IThreadPoolWorkItem override, which is the entry function for this task when the TP scheduler decides to run it. + + + + + + Outermost entry function to execute this task. Handles all aspects of executing a task on the caller thread. + Currently this is called by IThreadPoolWorkItem.ExecuteWorkItem(), and TaskManager.TryExecuteInline. + + + Performs atomic updates to prevent double execution. Should only be set to true + in codepaths servicing user provided TaskSchedulers. The ConcRT or ThreadPool schedulers don't need this. + + + + The actual code which invokes the body of the task. This can be overriden in derived types. + + + + + Alternate InnerInvoke prototype to be called from ExecuteSelfReplicating() so that + the Parallel Debugger can discover the actual task being invoked. + Details: Here, InnerInvoke is actually being called on the rootTask object while we are actually executing the + childTask. And the debugger needs to discover the childTask, so we pass that down as an argument. + The NoOptimization and NoInlining flags ensure that the childTask pointer is retained, and that this + function appears on the callstack. + + + + + + Performs whatever handling is necessary for an unhandled exception. Normally + this just entails adding the exception to the holder object. + + The exception that went unhandled. + + + + Waits for the to complete execution. + + + The was canceled -or- an exception was thrown during + the execution of the . + + + The has been disposed. + + + + + Waits for the to complete execution. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + true if the completed execution within the allotted time; otherwise, false. + + + The was canceled -or- an exception was thrown during the execution of the . + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + The has been disposed. + + + + + Waits for the to complete execution. + + + A to observe while waiting for the task to complete. + + + The was canceled. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + + + Waits for the to complete execution. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + true if the completed execution within the allotted time; otherwise, + false. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + + + Waits for the to complete execution. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for the task to complete. + + + true if the completed execution within the allotted time; otherwise, false. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + The core wait function, which is only accesible internally. It's meant to be used in places in TPL code where + the current context is known or cached. + + + + + Cancels the . + + Indiactes whether we should only cancel non-invoked tasks. + For the default scheduler this option will only be serviced through TryDequeue. + For custom schedulers we also attempt an atomic state transition. + true if the task was successfully canceled; otherwise, false. + The + has been disposed. + + + + Sets the task's cancellation acknowledged flag. + + + + + Runs all of the continuations, as appropriate. + + + + + Helper function to determine whether the current task is in the state desired by the + continuation kind under evaluation. Three possibilities exist: the task failed with + an unhandled exception (OnFailed), the task was canceled before running (OnAborted), + or the task completed successfully (OnCompletedSuccessfully). Note that the last + one includes completing due to cancellation. + + The continuation options under evaluation. + True if the continuation should be run given the task's current state. + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + The that will be assigned to the new continuation task. + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Converts TaskContinuationOptions to TaskCreationOptions, and also does + some validity checking along the way. + + Incoming TaskContinuationOptions + Outgoing TaskCreationOptions + Outgoing InternalTaskOptions + + + + Registers the continuation and possibly runs it (if the task is already finished). + + The continuation task itself. + TaskScheduler with which to associate continuation task. + Restrictions on when the continuation becomes active. + + + + Waits for all of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + An array of instances on which to wait. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + A to observe while waiting for the tasks to complete. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The was canceled. + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for the tasks to complete. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + Waits for a set of handles in a STA-aware way. In other words, it will wait for each + of the events individually if we're on a STA thread, because MsgWaitForMultipleObjectsEx + can't do a true wait-all due to its hidden message queue event. This is not atomic, + of course, but we only wait on one-way (MRE) events anyway so this is OK. + + An array of wait handles to wait on. + The timeout to use during waits. + The cancellationToken that enables a wait to be canceled. + True if all waits succeeded, false if a timeout occurred. + + + + Internal WaitAll implementation which is meant to be used with small number of tasks, + optimized for Parallel.Invoke and other structured primitives. + + + + + This internal function is only meant to be called by WaitAll() + If the completed task is canceled or it has other exceptions, here we will add those + into the passed in exception list (which will be lazily initialized here). + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + The index of the completed task in the array argument. + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + A to observe while waiting for a task to complete. + + + The index of the completed task in the array argument. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + The was canceled. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for a task to complete. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + Gets a unique ID for this Task instance. + + + Task IDs are assigned on-demand and do not necessarily represent the order in the which Task + instances were created. + + + + + Returns the unique ID of the currently executing Task. + + + + + Gets the Task instance currently executing, or + null if none exists. + + + + + Gets the Exception that caused the Task to end prematurely. If the Task completed successfully or has not yet thrown any + exceptions, this will return null. + + + Tasks that throw unhandled exceptions store the resulting exception and propagate it wrapped in a + in calls to Wait + or in accesses to the property. Any exceptions not observed by the time + the Task instance is garbage collected will be propagated on the finalizer thread. + + + The Task + has been disposed. + + + + + Gets the TaskStatus of this Task. + + + + + Gets whether this Task instance has completed + execution due to being canceled. + + + A Task will complete in Canceled state either if its CancellationToken + was marked for cancellation before the task started executing, or if the task acknowledged the cancellation request on + its already signaled CancellationToken by throwing an + OperationCanceledException2 that bears the same + CancellationToken. + + + + + Returns true if this task has a cancellation token and it was signaled. + To be used internally in execute entry codepaths. + + + + + This internal property provides access to the CancellationToken that was set on the task + when it was constructed. + + + + + Gets whether this threw an OperationCanceledException2 while its CancellationToken was signaled. + + + + + Gets whether this Task has completed. + + + will return true when the Task is in one of the three + final states: RanToCompletion, + Faulted, or + Canceled. + + + + + Checks whether this task has been disposed. + + + + + Gets the TaskCreationOptions used + to create this task. + + + + + Gets a that can be used to wait for the task to + complete. + + + Using the wait functionality provided by + should be preferred over using for similar + functionality. + + + The has been disposed. + + + + + Gets the state object supplied when the Task was created, + or null if none was supplied. + + + + + Gets an indication of whether the asynchronous operation completed synchronously. + + true if the asynchronous operation completed synchronously; otherwise, false. + + + + Provides access to the TaskScheduler responsible for executing this Task. + + + + + Provides access to factory methods for creating and instances. + + + The factory returned from is a default instance + of , as would result from using + the default constructor on TaskFactory. + + + + + Provides an event that can be used to wait for completion. + Only called by Wait*(), which means that we really do need to instantiate a completion event. + + + + + Determines whether this is the root task of a self replicating group. + + + + + Determines whether the task is a replica itself. + + + + + The property formerly known as IsFaulted. + + + + + Gets whether the completed due to an unhandled exception. + + + If is true, the Task's will be equal to + TaskStatus.Faulted, and its + property will be non-null. + + + + + Checks whether the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag is set, + This will only be used by the implicit wait to prevent double throws + + + + + + Checks whether the body was ever invoked. Used by task scheduler code to verify custom schedulers actually ran the task. + + + + + A structure to hold continuation information. + + + + + Constructs a new continuation structure. + + The task to be activated. + The continuation options. + The scheduler to use for the continuation. + + + + Invokes the continuation for the target completion task. + + The completed task. + Whether the continuation can be inlined. + + + + Initializes a new with the specified function. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + + The argument is null. + + + + + Initializes a new with the specified function. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + The to be assigned to this task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified function and creation options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified function and creation options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified function and state. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the action. + + The argument is null. + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + The to be assigned to the new task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + The to be assigned to the new task. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Creates a new future object. + + The parent task for this future. + A function that yields the future value. + The task scheduler which will be used to execute the future. + The CancellationToken for the task. + Options to control the future's behavior. + Internal options to control the future's behavior. + The argument specifies + a SelfReplicating , which is illegal."/>. + + + + Creates a new future object. + + The parent task for this future. + An object containing data to be used by the action; may be null. + A function that yields the future value. + The CancellationToken for the task. + The task scheduler which will be used to execute the future. + Options to control the future's behavior. + Internal options to control the future's behavior. + The argument specifies + a SelfReplicating , which is illegal."/>. + + + + Evaluates the value selector of the Task which is passed in as an object and stores the result. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new task. + A new continuation . + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The , when executed, should return a . This task's completion state will be transferred to the task returned + from the ContinueWith call. + + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be passed as + an argument this completed task. + + The that will be assigned to the new task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The , when executed, should return a . + This task's completion state will be transferred to the task returned from the + ContinueWith call. + + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Gets the result value of this . + + + The get accessor for this property ensures that the asynchronous operation is complete before + returning. Once the result of the computation is available, it is stored and will be returned + immediately on later calls to . + + + + + Provides access to factory methods for creating instances. + + + The factory returned from is a default instance + of , as would result from using + the default constructor on the factory type. + + + + + Provides support for creating and scheduling + Task{TResult} objects. + + The type of the results that are available though + the Task{TResult} objects that are associated with + the methods in this class. + + + There are many common patterns for which tasks are relevant. The + class encodes some of these patterns into methods that pick up default settings, which are + configurable through its constructors. + + + A default instance of is available through the + Task{TResult}.Factory property. + + + + + + Initializes a instance with the default configuration. + + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the default configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The + TaskScheduler to use to schedule any tasks created with this TaskFactory{TResult}. A null value + indicates that the current TaskScheduler should be used. + + + With this constructor, the + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to , unless it's null, in which case the property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}. + + + The exception that is thrown when the + argument or the + argument specifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}. + + + The default + TaskScheduler to use to schedule any Tasks created with this TaskFactory{TResult}. A null value + indicates that TaskScheduler.Current should be used. + + + The exception that is thrown when the + argument or the + argumentspecifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to + , unless it's null, in which case the property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new task. + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The that will be assigned to the new task. + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Gets the default CancellationToken of this + TaskFactory. + + + This property returns the default that will be assigned to all + tasks created by this factory unless another CancellationToken value is explicitly specified + during the call to the factory methods. + + + + + Gets the TaskScheduler of this + TaskFactory{TResult}. + + + This property returns the default scheduler for this factory. It will be used to schedule all + tasks unless another scheduler is explicitly specified during calls to this factory's methods. + If null, TaskScheduler.Current + will be used. + + + + + Gets the TaskCreationOptions + value of this TaskFactory{TResult}. + + + This property returns the default creation options for this factory. They will be used to create all + tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Gets the TaskContinuationOptions + value of this TaskFactory{TResult}. + + + This property returns the default continuation options for this factory. They will be used to create + all continuation tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Represents the current stage in the lifecycle of a . + + + + + The task has been initialized but has not yet been scheduled. + + + + + The task is waiting to be activated and scheduled internally by the .NET Framework infrastructure. + + + + + The task has been scheduled for execution but has not yet begun executing. + + + + + The task is running but has not yet completed. + + + + + The task has finished executing and is implicitly waiting for + attached child tasks to complete. + + + + + The task completed execution successfully. + + + + + The task acknowledged cancellation by throwing an OperationCanceledException2 with its own CancellationToken + while the token was in signaled state, or the task's CancellationToken was already signaled before the + task started executing. + + + + + The task completed due to an unhandled exception. + + + + + Specifies flags that control optional behavior for the creation and execution of tasks. + + + + + Specifies that the default behavior should be used. + + + + + A hint to a TaskScheduler to schedule a + task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to + be run sooner, and tasks scheduled later will be more likely to be run later. + + + + + Specifies that a task will be a long-running, course-grained operation. It provides a hint to the + TaskScheduler that oversubscription may be + warranted. + + + + + Specifies that a task is attached to a parent in the task hierarchy. + + + + + Task creation flags which are only used internally. + + + + Specifies "No internal task options" + + + Used to filter out internal vs. public task creation options. + + + Specifies that the task will be queued by the runtime before handing it over to the user. + This flag will be used to skip the cancellationtoken registration step, which is only meant for unstarted tasks. + + + + Specifies flags that control optional behavior for the creation and execution of continuation tasks. + + + + + Default = "Continue on any, no task options, run asynchronously" + Specifies that the default behavior should be used. Continuations, by default, will + be scheduled when the antecedent task completes, regardless of the task's final TaskStatus. + + + + + A hint to a TaskScheduler to schedule a + task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to + be run sooner, and tasks scheduled later will be more likely to be run later. + + + + + Specifies that a task will be a long-running, course-grained operation. It provides + a hint to the TaskScheduler that + oversubscription may be warranted. + + + + + Specifies that a task is attached to a parent in the task hierarchy. + + + + + Specifies that the continuation task should not be scheduled if its antecedent ran to completion. + This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should not be scheduled if its antecedent threw an unhandled + exception. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should not be scheduled if its antecedent was canceled. This + option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent ran to + completion. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent threw an + unhandled exception. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent was canceled. + This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be executed synchronously. With this option + specified, the continuation will be run on the same thread that causes the antecedent task to + transition into its final state. If the antecedent is already complete when the continuation is + created, the continuation will run on the thread creating the continuation. Only very + short-running continuations should be executed synchronously. + + + + + Represents an exception used to communicate task cancellation. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + class with a specified error message and a reference to the inner exception that is the cause of + this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + + Initializes a new instance of the class + with a reference to the that has been canceled. + + A task that has been canceled. + + + + Gets the task associated with this exception. + + + It is permissible for no Task to be associated with a + , in which case + this property will return null. + + + + + Represents the producer side of a unbound to a + delegate, providing access to the consumer side through the property. + + + + It is often the case that a is desired to + represent another asynchronous operation. + TaskCompletionSource is provided for this purpose. It enables + the creation of a task that can be handed out to consumers, and those consumers can use the members + of the task as they would any other. However, unlike most tasks, the state of a task created by a + TaskCompletionSource is controlled explicitly by the methods on TaskCompletionSource. This enables the + completion of the external asynchronous operation to be propagated to the underlying Task. The + separation also ensures that consumers are not able to transition the state without access to the + corresponding TaskCompletionSource. + + + All members of are thread-safe + and may be used from multiple threads concurrently. + + + The type of the result value assocatied with this . + + + + Creates a . + + + + + Creates a + with the specified options. + + + The created + by this instance and accessible through its property + will be instantiated using the specified . + + The options to use when creating the underlying + . + + The represent options invalid for use + with a . + + + + + Creates a + with the specified state. + + The state to use as the underlying + 's AsyncState. + + + + Creates a with + the specified state and options. + + The options to use when creating the underlying + . + The state to use as the underlying + 's AsyncState. + + The represent options invalid for use + with a . + + + + + Attempts to transition the underlying + into the + Faulted + state. + + The exception to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The argument is null. + The was disposed. + + + + Attempts to transition the underlying + into the + Faulted + state. + + The collection of exceptions to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The argument is null. + There are one or more null elements in . + The collection is empty. + The was disposed. + + + + Transitions the underlying + into the + Faulted + state. + + The exception to bind to this . + The argument is null. + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + Faulted + state. + + The collection of exceptions to bind to this . + The argument is null. + There are one or more null elements in . + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Attempts to transition the underlying + into the + RanToCompletion + state. + + The result value to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + RanToCompletion + state. + + The result value to bind to this . + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + Canceled + state. + + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Attempts to transition the underlying + into the + Canceled + state. + + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Gets the created + by this . + + + This property enables a consumer access to the that is controlled by this instance. + The , , + , and + methods (and their "Try" variants) on this instance all result in the relevant state + transitions on this underlying Task. + + + + + An exception holder manages a list of exceptions for one particular task. + It offers the ability to aggregate, but more importantly, also offers intrinsic + support for propagating unhandled exceptions that are never observed. It does + this by aggregating and throwing if the holder is ever GC'd without the holder's + contents ever having been requested (e.g. by a Task.Wait, Task.get_Exception, etc). + + + + + Creates a new holder; it will be registered for finalization. + + The task this holder belongs to. + + + + A finalizer that repropagates unhandled exceptions. + + + + + Add an exception to the internal list. This will ensure the holder is + in the proper state (handled/unhandled) depending on the list's contents. + + An exception object (either an Exception or an + IEnumerable{Exception}) to add to the list. + + + + A private helper method that ensures the holder is considered + unhandled, i.e. it is registered for finalization. + + + + + A private helper method that ensures the holder is considered + handled, i.e. it is not registered for finalization. + + Whether this is called from the finalizer thread. + + + + Allocates a new aggregate exception and adds the contents of the list to + it. By calling this method, the holder assumes exceptions to have been + "observed", such that the finalization check will be subsequently skipped. + + Whether this is being called from a finalizer. + An extra exception to be included (optionally). + The aggregate exception to throw. + + + + Provides a set of static (Shared in Visual Basic) methods for working with specific kinds of + instances. + + + + + Creates a proxy Task that represents the + asynchronous operation of a Task{Task}. + + + It is often useful to be able to return a Task from a + Task{TResult}, where the inner Task represents work done as part of the outer Task{TResult}. However, + doing so results in a Task{Task}, which, if not dealt with carefully, could produce unexpected behavior. Unwrap + solves this problem by creating a proxy Task that represents the entire asynchronous operation of such a Task{Task}. + + The Task{Task} to unwrap. + The exception that is thrown if the + argument is null. + A Task that represents the asynchronous operation of the provided Task{Task}. + + + + Creates a proxy Task{TResult} that represents the + asynchronous operation of a Task{Task{TResult}}. + + + It is often useful to be able to return a Task{TResult} from a Task{TResult}, where the inner Task{TResult} + represents work done as part of the outer Task{TResult}. However, doing so results in a Task{Task{TResult}}, + which, if not dealt with carefully, could produce unexpected behavior. Unwrap solves this problem by + creating a proxy Task{TResult} that represents the entire asynchronous operation of such a Task{Task{TResult}}. + + The Task{Task{TResult}} to unwrap. + The exception that is thrown if the + argument is null. + A Task{TResult} that represents the asynchronous operation of the provided Task{Task{TResult}}. /// Unwraps a Task that returns another Task. + + + + Provides support for creating and scheduling + Tasks. + + + + There are many common patterns for which tasks are relevant. The + class encodes some of these patterns into methods that pick up default settings, which are + configurable through its constructors. + + + A default instance of is available through the + Task.Factory property. + + + + + + Initializes a instance with the default configuration. + + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The + TaskScheduler to use to schedule any tasks created with this TaskFactory. A null value + indicates that the current TaskScheduler should be used. + + + With this constructor, the + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to , unless it's null, in which case the property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory. + + + The exception that is thrown when the + argument or the + argument specifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory. + + + The default + TaskScheduler to use to schedule any Tasks created with this TaskFactory. A null value + indicates that TaskScheduler.Current should be used. + + + The exception that is thrown when the + argument or the + argumentspecifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to + , unless it's null, in which case the property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The started Task. + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors + and then calling + Start to schedule it for execution. However, + unless creation and scheduling must be separated, StartNew is the recommended + approach for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The that will be assigned to the new task. + The started Task. + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors + and then calling + Start to schedule it for execution. However, + unless creation and scheduling must be separated, StartNew is the recommended + approach for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The that will be assigned to the new + A TaskCreationOptions value that controls the behavior of the + created + Task. + The TaskScheduler + that is used to schedule the created Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The started Task. + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The that will be assigned to the new + The started Task. + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The TaskScheduler + that is used to schedule the created Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the asynchronous + operation. + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the asynchronous + operation. + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the asynchronous + operation. + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Check validity of options passed to FromAsync method + + The options to be validated. + determines type of FromAsync method that called this method + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Gets the default CancellationToken of this + TaskFactory. + + + This property returns the default that will be assigned to all + tasks created by this factory unless another CancellationToken value is explicitly specified + during the call to the factory methods. + + + + + Gets the TaskScheduler of this + TaskFactory. + + + This property returns the default scheduler for this factory. It will be used to schedule all + tasks unless another scheduler is explicitly specified during calls to this factory's methods. + If null, TaskScheduler.Current + will be used. + + + + + Gets the TaskCreationOptions + value of this TaskFactory. + + + This property returns the default creation options for this factory. They will be used to create all + tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Gets the TaskContinuationOptions + value of this TaskFactory. + + + This property returns the default continuation options for this factory. They will be used to create + all continuation tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Represents an abstract scheduler for tasks. + + + + TaskScheduler acts as the extension point for all + pluggable scheduling logic. This includes mechanisms such as how to schedule a task for execution, and + how scheduled tasks should be exposed to debuggers. + + + All members of the abstract type are thread-safe + and may be used from multiple threads concurrently. + + + + + + Queues a Task to the scheduler. + + + + A class derived from TaskScheduler + implements this method to accept tasks being scheduled on the scheduler. + A typical implementation would store the task in an internal data structure, which would + be serviced by threads that would execute those tasks at some time in the future. + + + This method is only meant to be called by the .NET Framework and + should not be called directly by the derived class. This is necessary + for maintaining the consistency of the system. + + + The Task to be queued. + The argument is null. + + + + Determines whether the provided Task + can be executed synchronously in this call, and if it can, executes it. + + + + A class derived from TaskScheduler implements this function to + support inline execution of a task on a thread that initiates a wait on that task object. Inline + execution is optional, and the request may be rejected by returning false. However, better + scalability typically results the more tasks that can be inlined, and in fact a scheduler that + inlines too little may be prone to deadlocks. A proper implementation should ensure that a + request executing under the policies guaranteed by the scheduler can successfully inline. For + example, if a scheduler uses a dedicated thread to execute tasks, any inlining requests from that + thread should succeed. + + + If a scheduler decides to perform the inline execution, it should do so by calling to the base + TaskScheduler's + TryExecuteTask method with the provided task object, propagating + the return value. It may also be appropriate for the scheduler to remove an inlined task from its + internal data structures if it decides to honor the inlining request. Note, however, that under + some circumstances a scheduler may be asked to inline a task that was not previously provided to + it with the method. + + + The derived scheduler is responsible for making sure that the calling thread is suitable for + executing the given task as far as its own scheduling and execution policies are concerned. + + + The Task to be + executed. + A Boolean denoting whether or not task has previously been + queued. If this parameter is True, then the task may have been previously queued (scheduled); if + False, then the task is known not to have been queued, and this call is being made in order to + execute the task inline without queueing it. + A Boolean value indicating whether the task was executed inline. + The argument is + null. + The was already + executed. + + + + Generates an enumerable of Task instances + currently queued to the scheduler waiting to be executed. + + + + A class derived from implements this method in order to support + integration with debuggers. This method will only be invoked by the .NET Framework when the + debugger requests access to the data. The enumerable returned will be traversed by debugging + utilities to access the tasks currently queued to this scheduler, enabling the debugger to + provide a representation of this information in the user interface. + + + It is important to note that, when this method is called, all other threads in the process will + be frozen. Therefore, it's important to avoid synchronization with other threads that may lead to + blocking. If synchronization is necessary, the method should prefer to throw a + than to block, which could cause a debugger to experience delays. Additionally, this method and + the enumerable returned must not modify any globally visible state. + + + The returned enumerable should never be null. If there are currently no queued tasks, an empty + enumerable should be returned instead. + + + For developers implementing a custom debugger, this method shouldn't be called directly, but + rather this functionality should be accessed through the internal wrapper method + GetScheduledTasksForDebugger: + internal Task[] GetScheduledTasksForDebugger(). This method returns an array of tasks, + rather than an enumerable. In order to retrieve a list of active schedulers, a debugger may use + another internal method: internal static TaskScheduler[] GetTaskSchedulersForDebugger(). + This static method returns an array of all active TaskScheduler instances. + GetScheduledTasksForDebugger then may be used on each of these scheduler instances to retrieve + the list of scheduled tasks for each. + + + An enumerable that allows traversal of tasks currently queued to this scheduler. + + + This scheduler is unable to generate a list of queued tasks at this time. + + + + + Retrieves some thread static state that can be cached and passed to multiple + TryRunInline calls, avoiding superflous TLS fetches. + + A bag of TLS state (or null if none exists). + + + + Attempts to execute the target task synchronously. + + The task to run. + True if the task may have been previously queued, + false if the task was absolutely not previously queued. + The state retrieved from GetThreadStatics + True if it ran, false otherwise. + + + + Attempts to dequeue a Task that was previously queued to + this scheduler. + + The Task to be dequeued. + A Boolean denoting whether the argument was successfully dequeued. + The argument is null. + + + + Notifies the scheduler that a work item has made progress. + + + + + Initializes the . + + + + + Frees all resources associated with this scheduler. + + + + + Creates a + associated with the current . + + + All Task instances queued to + the returned scheduler will be executed through a call to the + Post method + on that context. + + + A associated with + the current SynchronizationContext, as + determined by SynchronizationContext.Current. + + + The current SynchronizationContext may not be used as a TaskScheduler. + + + + + Attempts to execute the provided Task + on this scheduler. + + + + Scheduler implementations are provided with Task + instances to be executed through either the method or the + method. When the scheduler deems it appropriate to run the + provided task, should be used to do so. TryExecuteTask handles all + aspects of executing a task, including action invocation, exception handling, state management, + and lifecycle control. + + + must only be used for tasks provided to this scheduler by the .NET + Framework infrastructure. It should not be used to execute arbitrary tasks obtained through + custom mechanisms. + + + + A Task object to be executed. + + The is not associated with this scheduler. + + A Boolean that is true if was successfully executed, false if it + was not. A common reason for execution failure is that the task had previously been executed or + is in the process of being executed by another thread. + + + + Provides an array of all queued Task instances + for the debugger. + + + The returned array is populated through a call to . + Note that this function is only meant to be invoked by a debugger remotely. + It should not be called by any other codepaths. + + An array of Task instances. + + This scheduler is unable to generate a list of queued tasks at this time. + + + + + Provides an array of all active TaskScheduler + instances for the debugger. + + + This function is only meant to be invoked by a debugger remotely. + It should not be called by any other codepaths. + + An array of TaskScheduler instances. + + + + Registers a new TaskScheduler instance in the global collection of schedulers. + + + + + Removes a TaskScheduler instance from the global collection of schedulers. + + + + + Indicates the maximum concurrency level this + is able to support. + + + + + Indicates whether this is a custom scheduler, in which case the safe code paths will be taken upon task entry + using a CAS to transition from queued state to executing. + + + + + Gets the default TaskScheduler instance. + + + + + Gets the TaskScheduler + associated with the currently executing task. + + + When not called from within a task, will return the scheduler. + + + + + Gets the unique ID for this . + + + + + Occurs when a faulted 's unobserved exception is about to trigger exception escalation + policy, which, by default, would terminate the process. + + + This AppDomain-wide event provides a mechanism to prevent exception + escalation policy (which, by default, terminates the process) from triggering. + Each handler is passed a + instance, which may be used to examine the exception and to mark it as observed. + + + + + Nested class that provides debugger view for TaskScheduler + + + + Default thread pool scheduler. + + + + A TaskScheduler implementation that executes all tasks queued to it through a call to + on the + that its associated with. The default constructor for this class binds to the current + + + + + Constructs a SynchronizationContextTaskScheduler associated with + + This constructor expects to be set. + + + + Implemetation of for this scheduler class. + + Simply posts the tasks to be executed on the associated . + + + + + + Implementation of for this scheduler class. + + The task will be executed inline only if the call happens within + the associated . + + + + + + + Implementes the property for + this scheduler class. + + By default it returns 1, because a based + scheduler only supports execution on a single thread. + + + + + Provides data for the event that is raised when a faulted 's + exception goes unobserved. + + + The Exception property is used to examine the exception without marking it + as observed, whereas the method is used to mark the exception + as observed. Marking the exception as observed prevents it from triggering exception escalation policy + which, by default, terminates the process. + + + + + Initializes a new instance of the class + with the unobserved exception. + + The Exception that has gone unobserved. + + + + Marks the as "observed," thus preventing it + from triggering exception escalation policy which, by default, terminates the process. + + + + + Gets whether this exception has been marked as "observed." + + + + + The Exception that went unobserved. + + + + + Represents an exception used to communicate an invalid operation by a + . + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + class using the default error message and a reference to the inner exception that is the cause of + this exception. + + The exception that is the cause of the current exception. + + + + Initializes a new instance of the + class with a specified error message and a reference to the inner exception that is the cause of + this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/ensureRedirect.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl4+win8/ensureRedirect.xml new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Runtime.dll b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Runtime.dll new file mode 100644 index 0000000..fa831ad Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Runtime.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Runtime.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Runtime.xml new file mode 100644 index 0000000..93cb00d --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Runtime.xml @@ -0,0 +1,56 @@ + + + + System.Runtime + + + + Defines a provider for progress updates. + The type of progress update value. + + + Reports a progress update. + The value of the updated progress. + + + Identities the async state machine type for this method. + + + Identities the state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + Gets the type that implements the state machine. + + + Initializes the attribute. + The type that implements the state machine. + + + + Allows you to obtain the method or property name of the caller to the method. + + + + + Allows you to obtain the line number in the source file at which the method is called. + + + + + Allows you to obtain the full path of the source file that contains the caller. + This is the file path at the time of compile. + + + + Identities the iterator state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Threading.Tasks.dll b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Threading.Tasks.dll new file mode 100644 index 0000000..ebbac4c Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Threading.Tasks.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Threading.Tasks.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Threading.Tasks.xml new file mode 100644 index 0000000..b47921e --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/System.Threading.Tasks.xml @@ -0,0 +1,475 @@ + + + + System.Threading.Tasks + + + + Holds state related to the builder's IAsyncStateMachine. + This is a mutable struct. Be very delicate with it. + + + A reference to the heap-allocated state machine object associated with this builder. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument is null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + + Gets the Action to use with an awaiter's OnCompleted or UnsafeOnCompleted method. + On first invocation, the supplied state machine will be boxed. + + Specifies the type of the method builder used. + Specifies the type of the state machine used. + The builder. + The state machine. + An Action to provide to the awaiter. + + + Provides the ability to invoke a state machine's MoveNext method under a supplied ExecutionContext. + + + The context with which to run MoveNext. + + + The state machine whose MoveNext method should be invoked. + + + Initializes the runner. + The context with which to run MoveNext. + + + Invokes MoveNext under the provided context. + + + Cached delegate used with ExecutionContext.Run. + + + Invokes the MoveNext method on the supplied IAsyncStateMachine. + The IAsyncStateMachine machine instance. + + + Provides a base class used to cache tasks of a specific return type. + Specifies the type of results the cached tasks return. + + + + A singleton cache for this result type. + This may be null if there are no cached tasks for this TResult. + + + + Creates a non-disposable task. + The result for the task. + The cacheable task. + + + Creates a cache. + A task cache for this result type. + + + Gets a cached task if one exists. + The result for which we want a cached task. + A cached task if one exists; otherwise, null. + + + Provides a cache for Boolean tasks. + + + A true task. + + + A false task. + + + Gets a cached task for the Boolean result. + true or false + A cached task for the Boolean result. + + + Provides a cache for zero Int32 tasks. + + + The minimum value, inclusive, for which we want a cached task. + + + The maximum value, exclusive, for which we want a cached task. + + + The cache of Task{Int32}. + + + Creates an array of cached tasks for the values in the range [INCLUSIVE_MIN,EXCLUSIVE_MAX). + + + Gets a cached task for the zero Int32 result. + The integer value + A cached task for the Int32 result or null if not cached. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + Represents an asynchronous method builder. + + + A cached VoidTaskResult task used for builders that complete synchronously. + + + The generic builder object to which this non-generic instance delegates. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state. + + The builder is not initialized. + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + + Gets the for this builder. + The representing the builder's asynchronous operation. + The builder is not initialized. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder{TResult} is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + A cached task for default(TResult). + + + State related to the IAsyncStateMachine. + + + The lazily-initialized task. + Must be named m_task for debugger step-over to work correctly. + + + The lazily-initialized task completion source. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state with the specified result. + + The result to use to complete the task. + The task has already completed. + + + + Completes the builder by using either the supplied completed task, or by completing + the builder's previously accessed task using default(TResult). + + A task already completed with the value default(TResult). + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + This should only be invoked from within an asynchronous method, + and only by the debugger. + + + + + Gets a task for the specified result. This will either + be a cached or new task, never null. + + The result for which we need a task. + The completed task containing the result. + + + Gets the lazily-initialized TaskCompletionSource. + + + Gets the for this builder. + The representing the builder's asynchronous operation. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + + Provides a builder for asynchronous methods that return void. + This type is intended for compiler use only. + + + + The synchronization context associated with this operation. + + + State related to the IAsyncStateMachine. + + + An object used by the debugger to uniquely identify this builder. Lazily initialized. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Registers with UnobservedTaskException to suppress exception crashing. + + + Non-zero if PreventUnobservedTaskExceptions has already been invoked. + + + Initializes a new . + The initialized . + + + Initializes the . + The synchronizationContext associated with this operation. This may be null. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument was null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + Completes the method builder successfully. + + + Faults the method builder with an exception. + The exception that is the cause of this fault. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + + + Notifies the current synchronization context that the operation completed. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger and only in a single-threaded manner. + + + + + Represents state machines generated for asynchronous methods. + This type is intended for compiler use only. + + + + Moves the state machine to its next state. + + + Configures the state machine with a heap-allocated replica. + The heap-allocated replica. + + + + Represents an awaiter used to schedule continuations when an await operation completes. + + + + + Represents an operation that will schedule continuations when the operation completes. + + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + Unlike OnCompleted, UnsafeOnCompleted need not propagate ExecutionContext information. + + + Used with Task(of void) + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/ensureRedirect.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+sl5+win8+wp8/ensureRedirect.xml new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Runtime.dll b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Runtime.dll new file mode 100644 index 0000000..fa831ad Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Runtime.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Runtime.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Runtime.xml new file mode 100644 index 0000000..93cb00d --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Runtime.xml @@ -0,0 +1,56 @@ + + + + System.Runtime + + + + Defines a provider for progress updates. + The type of progress update value. + + + Reports a progress update. + The value of the updated progress. + + + Identities the async state machine type for this method. + + + Identities the state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + Gets the type that implements the state machine. + + + Initializes the attribute. + The type that implements the state machine. + + + + Allows you to obtain the method or property name of the caller to the method. + + + + + Allows you to obtain the line number in the source file at which the method is called. + + + + + Allows you to obtain the full path of the source file that contains the caller. + This is the file path at the time of compile. + + + + Identities the iterator state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Threading.Tasks.dll b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Threading.Tasks.dll new file mode 100644 index 0000000..ebbac4c Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Threading.Tasks.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Threading.Tasks.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Threading.Tasks.xml new file mode 100644 index 0000000..b47921e --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/System.Threading.Tasks.xml @@ -0,0 +1,475 @@ + + + + System.Threading.Tasks + + + + Holds state related to the builder's IAsyncStateMachine. + This is a mutable struct. Be very delicate with it. + + + A reference to the heap-allocated state machine object associated with this builder. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument is null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + + Gets the Action to use with an awaiter's OnCompleted or UnsafeOnCompleted method. + On first invocation, the supplied state machine will be boxed. + + Specifies the type of the method builder used. + Specifies the type of the state machine used. + The builder. + The state machine. + An Action to provide to the awaiter. + + + Provides the ability to invoke a state machine's MoveNext method under a supplied ExecutionContext. + + + The context with which to run MoveNext. + + + The state machine whose MoveNext method should be invoked. + + + Initializes the runner. + The context with which to run MoveNext. + + + Invokes MoveNext under the provided context. + + + Cached delegate used with ExecutionContext.Run. + + + Invokes the MoveNext method on the supplied IAsyncStateMachine. + The IAsyncStateMachine machine instance. + + + Provides a base class used to cache tasks of a specific return type. + Specifies the type of results the cached tasks return. + + + + A singleton cache for this result type. + This may be null if there are no cached tasks for this TResult. + + + + Creates a non-disposable task. + The result for the task. + The cacheable task. + + + Creates a cache. + A task cache for this result type. + + + Gets a cached task if one exists. + The result for which we want a cached task. + A cached task if one exists; otherwise, null. + + + Provides a cache for Boolean tasks. + + + A true task. + + + A false task. + + + Gets a cached task for the Boolean result. + true or false + A cached task for the Boolean result. + + + Provides a cache for zero Int32 tasks. + + + The minimum value, inclusive, for which we want a cached task. + + + The maximum value, exclusive, for which we want a cached task. + + + The cache of Task{Int32}. + + + Creates an array of cached tasks for the values in the range [INCLUSIVE_MIN,EXCLUSIVE_MAX). + + + Gets a cached task for the zero Int32 result. + The integer value + A cached task for the Int32 result or null if not cached. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + Represents an asynchronous method builder. + + + A cached VoidTaskResult task used for builders that complete synchronously. + + + The generic builder object to which this non-generic instance delegates. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state. + + The builder is not initialized. + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + + Gets the for this builder. + The representing the builder's asynchronous operation. + The builder is not initialized. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder{TResult} is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + A cached task for default(TResult). + + + State related to the IAsyncStateMachine. + + + The lazily-initialized task. + Must be named m_task for debugger step-over to work correctly. + + + The lazily-initialized task completion source. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state with the specified result. + + The result to use to complete the task. + The task has already completed. + + + + Completes the builder by using either the supplied completed task, or by completing + the builder's previously accessed task using default(TResult). + + A task already completed with the value default(TResult). + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + This should only be invoked from within an asynchronous method, + and only by the debugger. + + + + + Gets a task for the specified result. This will either + be a cached or new task, never null. + + The result for which we need a task. + The completed task containing the result. + + + Gets the lazily-initialized TaskCompletionSource. + + + Gets the for this builder. + The representing the builder's asynchronous operation. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + + Provides a builder for asynchronous methods that return void. + This type is intended for compiler use only. + + + + The synchronization context associated with this operation. + + + State related to the IAsyncStateMachine. + + + An object used by the debugger to uniquely identify this builder. Lazily initialized. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Registers with UnobservedTaskException to suppress exception crashing. + + + Non-zero if PreventUnobservedTaskExceptions has already been invoked. + + + Initializes a new . + The initialized . + + + Initializes the . + The synchronizationContext associated with this operation. This may be null. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument was null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + Completes the method builder successfully. + + + Faults the method builder with an exception. + The exception that is the cause of this fault. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + + + Notifies the current synchronization context that the operation completed. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger and only in a single-threaded manner. + + + + + Represents state machines generated for asynchronous methods. + This type is intended for compiler use only. + + + + Moves the state machine to its next state. + + + Configures the state machine with a heap-allocated replica. + The heap-allocated replica. + + + + Represents an awaiter used to schedule continuations when an await operation completes. + + + + + Represents an operation that will schedule continuations when the operation completes. + + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + Unlike OnCompleted, UnsafeOnCompleted need not propagate ExecutionContext information. + + + Used with Task(of void) + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/ensureRedirect.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8+wp8/ensureRedirect.xml new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Runtime.dll b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Runtime.dll new file mode 100644 index 0000000..fa831ad Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Runtime.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Runtime.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Runtime.xml new file mode 100644 index 0000000..93cb00d --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Runtime.xml @@ -0,0 +1,56 @@ + + + + System.Runtime + + + + Defines a provider for progress updates. + The type of progress update value. + + + Reports a progress update. + The value of the updated progress. + + + Identities the async state machine type for this method. + + + Identities the state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + Gets the type that implements the state machine. + + + Initializes the attribute. + The type that implements the state machine. + + + + Allows you to obtain the method or property name of the caller to the method. + + + + + Allows you to obtain the line number in the source file at which the method is called. + + + + + Allows you to obtain the full path of the source file that contains the caller. + This is the file path at the time of compile. + + + + Identities the iterator state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Threading.Tasks.dll b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Threading.Tasks.dll new file mode 100644 index 0000000..ebbac4c Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Threading.Tasks.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Threading.Tasks.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Threading.Tasks.xml new file mode 100644 index 0000000..b47921e --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/System.Threading.Tasks.xml @@ -0,0 +1,475 @@ + + + + System.Threading.Tasks + + + + Holds state related to the builder's IAsyncStateMachine. + This is a mutable struct. Be very delicate with it. + + + A reference to the heap-allocated state machine object associated with this builder. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument is null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + + Gets the Action to use with an awaiter's OnCompleted or UnsafeOnCompleted method. + On first invocation, the supplied state machine will be boxed. + + Specifies the type of the method builder used. + Specifies the type of the state machine used. + The builder. + The state machine. + An Action to provide to the awaiter. + + + Provides the ability to invoke a state machine's MoveNext method under a supplied ExecutionContext. + + + The context with which to run MoveNext. + + + The state machine whose MoveNext method should be invoked. + + + Initializes the runner. + The context with which to run MoveNext. + + + Invokes MoveNext under the provided context. + + + Cached delegate used with ExecutionContext.Run. + + + Invokes the MoveNext method on the supplied IAsyncStateMachine. + The IAsyncStateMachine machine instance. + + + Provides a base class used to cache tasks of a specific return type. + Specifies the type of results the cached tasks return. + + + + A singleton cache for this result type. + This may be null if there are no cached tasks for this TResult. + + + + Creates a non-disposable task. + The result for the task. + The cacheable task. + + + Creates a cache. + A task cache for this result type. + + + Gets a cached task if one exists. + The result for which we want a cached task. + A cached task if one exists; otherwise, null. + + + Provides a cache for Boolean tasks. + + + A true task. + + + A false task. + + + Gets a cached task for the Boolean result. + true or false + A cached task for the Boolean result. + + + Provides a cache for zero Int32 tasks. + + + The minimum value, inclusive, for which we want a cached task. + + + The maximum value, exclusive, for which we want a cached task. + + + The cache of Task{Int32}. + + + Creates an array of cached tasks for the values in the range [INCLUSIVE_MIN,EXCLUSIVE_MAX). + + + Gets a cached task for the zero Int32 result. + The integer value + A cached task for the Int32 result or null if not cached. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + Represents an asynchronous method builder. + + + A cached VoidTaskResult task used for builders that complete synchronously. + + + The generic builder object to which this non-generic instance delegates. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state. + + The builder is not initialized. + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + + Gets the for this builder. + The representing the builder's asynchronous operation. + The builder is not initialized. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder{TResult} is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + A cached task for default(TResult). + + + State related to the IAsyncStateMachine. + + + The lazily-initialized task. + Must be named m_task for debugger step-over to work correctly. + + + The lazily-initialized task completion source. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state with the specified result. + + The result to use to complete the task. + The task has already completed. + + + + Completes the builder by using either the supplied completed task, or by completing + the builder's previously accessed task using default(TResult). + + A task already completed with the value default(TResult). + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + This should only be invoked from within an asynchronous method, + and only by the debugger. + + + + + Gets a task for the specified result. This will either + be a cached or new task, never null. + + The result for which we need a task. + The completed task containing the result. + + + Gets the lazily-initialized TaskCompletionSource. + + + Gets the for this builder. + The representing the builder's asynchronous operation. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + + Provides a builder for asynchronous methods that return void. + This type is intended for compiler use only. + + + + The synchronization context associated with this operation. + + + State related to the IAsyncStateMachine. + + + An object used by the debugger to uniquely identify this builder. Lazily initialized. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Registers with UnobservedTaskException to suppress exception crashing. + + + Non-zero if PreventUnobservedTaskExceptions has already been invoked. + + + Initializes a new . + The initialized . + + + Initializes the . + The synchronizationContext associated with this operation. This may be null. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument was null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + Completes the method builder successfully. + + + Faults the method builder with an exception. + The exception that is the cause of this fault. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + + + Notifies the current synchronization context that the operation completed. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger and only in a single-threaded manner. + + + + + Represents state machines generated for asynchronous methods. + This type is intended for compiler use only. + + + + Moves the state machine to its next state. + + + Configures the state machine with a heap-allocated replica. + The heap-allocated replica. + + + + Represents an awaiter used to schedule continuations when an await operation completes. + + + + + Represents an operation that will schedule continuations when the operation completes. + + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + Unlike OnCompleted, UnsafeOnCompleted need not propagate ExecutionContext information. + + + Used with Task(of void) + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/ensureRedirect.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net40+win8/ensureRedirect.xml new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net45+win8+wp8/_._ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/portable-net45+win8+wp8/_._ new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Runtime.dll b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Runtime.dll new file mode 100644 index 0000000..97ab730 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Runtime.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Runtime.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Runtime.xml new file mode 100644 index 0000000..53f5bef --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Runtime.xml @@ -0,0 +1,860 @@ + + + + System.Runtime + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Argument must be of type {0}.. + + + + + Looks up a localized string similar to The last element of an eight element tuple must be a Tuple.. + + + + + Defines methods to support the comparison of objects for structural equality. + + + + + Determines whether an object is structurally equal to the current instance. + + The object to compare with the current instance. + An object that determines whether the current instance and other are equal. + true if the two objects are equal; otherwise, false. + + + + Returns a hash code for the current instance. + + An object that computes the hash code of the current object. + The hash code for the current instance. + + + + Supports the structural comparison of collection objects. + + + + + Determines whether the current collection object precedes, occurs in the same position as, or follows another object in the sort order. + + The object to compare with the current instance. + An object that compares members of the current collection object with the corresponding members of other. + An integer that indicates the relationship of the current collection object to other. + + This instance and other are not the same type. + + + + + Encapsulates a method that has five parameters and returns a value of the type specified by the TResult parameter. + + The type of the first parameter of the method that this delegate encapsulates. + The type of the second parameter of the method that this delegate encapsulates. + The type of the third parameter of the method that this delegate encapsulates. + The type of the fourth parameter of the method that this delegate encapsulates. + The type of the fifth parameter of the method that this delegate encapsulates. + The type of the return value of the method that this delegate encapsulates. + The first parameter of the method that this delegate encapsulates. + The second parameter of the method that this delegate encapsulates. + The third parameter of the method that this delegate encapsulates. + The fourth parameter of the method that this delegate encapsulates. + The fifth parameter of the method that this delegate encapsulates. + The return value of the method that this delegate encapsulates. + + + Defines a provider for progress updates. + The type of progress update value. + + + Reports a progress update. + The value of the updated progress. + + + Identities the async state machine type for this method. + + + Identities the state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + Gets the type that implements the state machine. + + + Initializes the attribute. + The type that implements the state machine. + + + + Allows you to obtain the method or property name of the caller to the method. + + + + + Allows you to obtain the line number in the source file at which the method is called. + + + + + Allows you to obtain the full path of the source file that contains the caller. + This is the file path at the time of compile. + + + + Identities the iterator state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + + Helper so we can call some tuple methods recursively without knowing the underlying types. + + + + + Provides static methods for creating tuple objects. + + + + + Creates a new 1-tuple, or singleton. + + The type of the only component of the tuple. + The value of the only component of the tuple. + A tuple whose value is (item1). + + + + Creates a new 3-tuple, or pair. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + An 2-tuple (pair) whose value is (item1, item2). + + + + Creates a new 3-tuple, or triple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + An 3-tuple (triple) whose value is (item1, item2, item3). + + + + Creates a new 4-tuple, or quadruple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + An 4-tuple (quadruple) whose value is (item1, item2, item3, item4). + + + + Creates a new 5-tuple, or quintuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + An 5-tuple (quintuple) whose value is (item1, item2, item3, item4, item5). + + + + Creates a new 6-tuple, or sextuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + An 6-tuple (sextuple) whose value is (item1, item2, item3, item4, item5, item6). + + + + Creates a new 7-tuple, or septuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + The type of the seventh component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + The value of the seventh component of the tuple. + An 7-tuple (septuple) whose value is (item1, item2, item3, item4, item5, item6, item7). + + + + Creates a new 8-tuple, or octuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + The type of the seventh component of the tuple. + The type of the eighth component of the tuple. + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + The value of the seventh component of the tuple. + The value of the eighth component of the tuple. + An 8-tuple (octuple) whose value is (item1, item2, item3, item4, item5, item6, item7, item8). + + + + Represents a 1-tuple, or singleton. + + The type of the tuple's only component. + + + + Initializes a new instance of the class. + + The value of the current tuple object's single component. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the tuple object's single component. + + + The value of the current tuple object's single component. + + + + + Represents an 2-tuple, or pair. + + The type of the first component of the tuple. + The type of the second component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Represents an 3-tuple, or triple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Represents an 4-tuple, or quadruple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Gets the value of the current tuple object's fourth component. + + + The value of the current tuple object's fourth component. + + + + + Represents an 5-tuple, or quintuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Gets the value of the current tuple object's fourth component. + + + The value of the current tuple object's fourth component. + + + + + Gets the value of the current tuple object's fifth component. + + + The value of the current tuple object's fifth component. + + + + + Represents an 6-tuple, or sextuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Gets the value of the current tuple object's fourth component. + + + The value of the current tuple object's fourth component. + + + + + Gets the value of the current tuple object's fifth component. + + + The value of the current tuple object's fifth component. + + + + + Gets the value of the current tuple object's sixth component. + + + The value of the current tuple object's sixth component. + + + + + Represents an 7-tuple, or septuple. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + The type of the seventh component of the tuple. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + The value of the seventh component of the tuple. + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Gets the value of the current tuple object's fourth component. + + + The value of the current tuple object's fourth component. + + + + + Gets the value of the current tuple object's fifth component. + + + The value of the current tuple object's fifth component. + + + + + Gets the value of the current tuple object's sixth component. + + + The value of the current tuple object's sixth component. + + + + + Gets the value of the current tuple object's seventh component. + + + The value of the current tuple object's seventh component. + + + + + Represents an n-tuple, where n is 8 or greater. + + The type of the first component of the tuple. + The type of the second component of the tuple. + The type of the third component of the tuple. + The type of the fourth component of the tuple. + The type of the fifth component of the tuple. + The type of the sixth component of the tuple. + The type of the seventh component of the tuple. + Any generic Tuple object that defines the types of the tuple's remaining components. + + + + Initializes a new instance of the class. + + The value of the first component of the tuple. + The value of the second component of the tuple. + The value of the third component of the tuple. + The value of the fourth component of the tuple. + The value of the fifth component of the tuple. + The value of the sixth component of the tuple. + The value of the seventh component of the tuple. + Any generic Tuple object that contains the values of the tuple's remaining components. + + rest is not a generic Tuple object. + + + + + Returns a value that indicates whether the current tuple object is equal to a specified object. + + The object to compare with this instance. + true if the current instance is equal to the specified object; otherwise, false. + + + + Calculates the hash code for the current tuple object. + + A 32-bit signed integer hash code. + + + + Returns a string that represents the value of this tuple instance. + + The string representation of this tuple object. + + + + Gets the value of the current tuple object's first component. + + + The value of the current tuple object's first component. + + + + + Gets the value of the current tuple object's second component. + + + The value of the current tuple object's second component. + + + + + Gets the value of the current tuple object's third component. + + + The value of the current tuple object's third component. + + + + + Gets the value of the current tuple object's fourth component. + + + The value of the current tuple object's fourth component. + + + + + Gets the value of the current tuple object's fifth component. + + + The value of the current tuple object's fifth component. + + + + + Gets the value of the current tuple object's sixth component. + + + The value of the current tuple object's sixth component. + + + + + Gets the value of the current tuple object's seventh component. + + + The value of the current tuple object's seventh component. + + + + + Gets the current tuple object's remaining components. + + + The value of the current tuple object's remaining components. + + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Threading.Tasks.dll b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Threading.Tasks.dll new file mode 100644 index 0000000..74f5e2c Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Threading.Tasks.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Threading.Tasks.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Threading.Tasks.xml new file mode 100644 index 0000000..6c77012 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/System.Threading.Tasks.xml @@ -0,0 +1,8969 @@ + + + + System.Threading.Tasks + + + + Represents one or more errors that occur during application execution. + + is used to consolidate multiple failures into a single, throwable + exception object. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error + message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + The argument + is null. + + + + Initializes a new instance of the class with + references to the inner exceptions that are the cause of this exception. + + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with + references to the inner exceptions that are the cause of this exception. + + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with a specified error + message and references to the inner exceptions that are the cause of this exception. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with a specified error + message and references to the inner exceptions that are the cause of this exception. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Allocates a new aggregate exception with the specified message and list of inner exceptions. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Returns the that is the root cause of this exception. + + + + + Invokes a handler on each contained by this . + + The predicate to execute for each exception. The predicate accepts as an + argument the to be processed and returns a Boolean to indicate + whether the exception was handled. + + Each invocation of the returns true or false to indicate whether the + was handled. After all invocations, if any exceptions went + unhandled, all unhandled exceptions will be put into a new + which will be thrown. Otherwise, the method simply returns. If any + invocations of the throws an exception, it will halt the processing + of any more exceptions and immediately propagate the thrown exception as-is. + + An exception contained by this was not handled. + The argument is + null. + + + + Flattens an instances into a single, new instance. + + A new, flattened . + + If any inner exceptions are themselves instances of + , this method will recursively flatten all of them. The + inner exceptions returned in the new + will be the union of all of the the inner exceptions from exception tree rooted at the provided + instance. + + + + + Creates and returns a string representation of the current . + + A string representation of the current exception. + + + + Gets a read-only collection of the instances that caused the + current exception. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to One or more errors occurred.. + + + + + Looks up a localized string similar to An element of innerExceptions was null.. + + + + + Looks up a localized string similar to {0}{1}---> (Inner Exception #{2}) {3}{4}{5}. + + + + + Looks up a localized string similar to No tokens were supplied.. + + + + + Looks up a localized string similar to The CancellationTokenSource associated with this CancellationToken has been disposed.. + + + + + Looks up a localized string similar to The CancellationTokenSource has been disposed.. + + + + + Looks up a localized string similar to The SyncRoot property may not be used for the synchronization of concurrent collections.. + + + + + Looks up a localized string similar to The array is multidimensional, or the type parameter for the set cannot be cast automatically to the type of the destination array.. + + + + + Looks up a localized string similar to The index is equal to or greater than the length of the array, or the number of elements in the dictionary is greater than the available space from index to the end of the destination array.. + + + + + Looks up a localized string similar to The capacity argument must be greater than or equal to zero.. + + + + + Looks up a localized string similar to The concurrencyLevel argument must be positive.. + + + + + Looks up a localized string similar to The index argument is less than zero.. + + + + + Looks up a localized string similar to TKey is a reference type and item.Key is null.. + + + + + Looks up a localized string similar to The key already existed in the dictionary.. + + + + + Looks up a localized string similar to The source argument contains duplicate keys.. + + + + + Looks up a localized string similar to The key was of an incorrect type for this dictionary.. + + + + + Looks up a localized string similar to The value was of an incorrect type for this dictionary.. + + + + + Looks up a localized string similar to The lazily-initialized type does not have a public, parameterless constructor.. + + + + + Looks up a localized string similar to ValueFactory returned null.. + + + + + Looks up a localized string similar to The spinCount argument must be in the range 0 to {0}, inclusive.. + + + + + Looks up a localized string similar to There are too many threads currently waiting on the event. A maximum of {0} waiting threads are supported.. + + + + + Looks up a localized string similar to The event has been disposed.. + + + + + Looks up a localized string similar to The operation was canceled.. + + + + + Looks up a localized string similar to The condition argument is null.. + + + + + Looks up a localized string similar to The timeout must represent a value between -1 and Int32.MaxValue, inclusive.. + + + + + Looks up a localized string similar to The specified TaskContinuationOptions combined LongRunning and ExecuteSynchronously. Synchronous continuations should not be long running.. + + + + + Looks up a localized string similar to The specified TaskContinuationOptions excluded all continuation kinds.. + + + + + Looks up a localized string similar to (Internal)An attempt was made to create a LongRunning SelfReplicating task.. + + + + + Looks up a localized string similar to The value needs to translate in milliseconds to -1 (signifying an infinite timeout), 0 or a positive integer less than or equal to Int32.MaxValue.. + + + + + Looks up a localized string similar to The value needs to be either -1 (signifying an infinite timeout), 0 or a positive integer.. + + + + + Looks up a localized string similar to A task may only be disposed if it is in a completion state (RanToCompletion, Faulted or Canceled).. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.LongRunning in calls to FromAsync.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.PreferFairness in calls to FromAsync.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.SelfReplicating in calls to FromAsync.. + + + + + Looks up a localized string similar to FromAsync was called with a TaskManager that had already shut down.. + + + + + Looks up a localized string similar to The tasks argument contains no tasks.. + + + + + Looks up a localized string similar to It is invalid to exclude specific continuation kinds for continuations off of multiple tasks.. + + + + + Looks up a localized string similar to The tasks argument included a null value.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task that was already started.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a continuation task.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task not bound to a delegate, such as the task returned from an asynchronous method.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task that has already completed.. + + + + + Looks up a localized string similar to Start may not be called on a task that was already started.. + + + + + Looks up a localized string similar to Start may not be called on a continuation task.. + + + + + Looks up a localized string similar to Start may not be called on a task with null action.. + + + + + Looks up a localized string similar to Start may not be called on a promise-style task.. + + + + + Looks up a localized string similar to Start may not be called on a task that has completed.. + + + + + Looks up a localized string similar to The task has been disposed.. + + + + + Looks up a localized string similar to The tasks array included at least one null element.. + + + + + Looks up a localized string similar to The awaited task has not yet completed.. + + + + + Looks up a localized string similar to A task was canceled.. + + + + + Looks up a localized string similar to The exceptions collection was empty.. + + + + + Looks up a localized string similar to The exceptions collection included at least one null element.. + + + + + Looks up a localized string similar to A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread.. + + + + + Looks up a localized string similar to (Internal)Expected an Exception or an IEnumerable<Exception>. + + + + + Looks up a localized string similar to ExecuteTask may not be called for a task which was already executed.. + + + + + Looks up a localized string similar to ExecuteTask may not be called for a task which was previously queued to a different TaskScheduler.. + + + + + Looks up a localized string similar to The current SynchronizationContext may not be used as a TaskScheduler.. + + + + + Looks up a localized string similar to The TryExecuteTaskInline call to the underlying scheduler succeeded, but the task body was not invoked.. + + + + + Looks up a localized string similar to An exception was thrown by a TaskScheduler.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.SelfReplicating for a Task<TResult>.. + + + + + Looks up a localized string similar to {Not yet computed}. + + + + + Looks up a localized string similar to A task's Exception may only be set directly if the task was created without a function.. + + + + + Looks up a localized string similar to An attempt was made to transition a task to a final state when it had already completed.. + + + + + Represents a thread-safe collection of keys and values. + + The type of the keys in the dictionary. + The type of the values in the dictionary. + + All public and protected members of are thread-safe and may be used + concurrently from multiple threads. + + + + + Initializes a new instance of the + class that is empty, has the default concurrency level, has the default initial capacity, and + uses the default comparer for the key type. + + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level and capacity, and uses the default + comparer for the key type. + + The estimated number of threads that will update the + concurrently. + The initial number of elements that the + can contain. + is + less than 1. + is less than + 0. + + + + Initializes a new instance of the + class that contains elements copied from the specified , has the default concurrency + level, has the default initial capacity, and uses the default comparer for the key type. + + The whose elements are copied to + the new + . + is a null reference + (Nothing in Visual Basic). + contains one or more + duplicate keys. + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level and capacity, and uses the specified + . + + The + implementation to use when comparing keys. + is a null reference + (Nothing in Visual Basic). + + + + Initializes a new instance of the + class that contains elements copied from the specified , has the default concurrency level, has the default + initial capacity, and uses the specified + . + + The whose elements are copied to + the new + . + The + implementation to use when comparing keys. + is a null reference + (Nothing in Visual Basic). -or- + is a null reference (Nothing in Visual Basic). + + + + + Initializes a new instance of the + class that contains elements copied from the specified , + has the specified concurrency level, has the specified initial capacity, and uses the specified + . + + The estimated number of threads that will update the + concurrently. + The whose elements are copied to the new + . + The implementation to use + when comparing keys. + + is a null reference (Nothing in Visual Basic). + -or- + is a null reference (Nothing in Visual Basic). + + + is less than 1. + + contains one or more duplicate keys. + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level, has the specified initial capacity, and + uses the specified . + + The estimated number of threads that will update the + concurrently. + The initial number of elements that the + can contain. + The + implementation to use when comparing keys. + + is less than 1. -or- + is less than 0. + + is a null reference + (Nothing in Visual Basic). + + + + Attempts to add the specified key and value to the . + + The key of the element to add. + The value of the element to add. The value can be a null reference (Nothing + in Visual Basic) for reference types. + true if the key/value pair was added to the + successfully; otherwise, false. + is null reference + (Nothing in Visual Basic). + The + contains too many elements. + + + + Determines whether the contains the specified + key. + + The key to locate in the . + true if the contains an element with + the specified key; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Attempts to remove and return the the value with the specified key from the + . + + The key of the element to remove and return. + When this method returns, contains the object removed from the + or the default value of + if the operation failed. + true if an object was removed successfully; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Removes the specified key from the dictionary if it exists and returns its associated value. + If matchValue flag is set, the key will be removed only if is associated with a particular + value. + + The key to search for and remove if it exists. + The variable into which the removed value, if found, is stored. + Whether removal of the key is conditional on its value. + The conditional value to compare against if is true + + + + + Attempts to get the value associated with the specified key from the . + + The key of the value to get. + When this method returns, contains the object from + the + with the spedified key or the default value of + , if the operation failed. + true if the key was found in the ; + otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Compares the existing value for the specified key with a specified value, and if they’re equal, + updates the key with a third value. + + The key whose value is compared with and + possibly replaced. + The value that replaces the value of the element with if the comparison results in equality. + The value that is compared to the value of the element with + . + true if the value with was equal to and replaced with ; otherwise, + false. + is a null + reference. + + + + Removes all keys and values from the . + + + + + Copies the elements of the to an array of + type , starting at the + specified array index. + + The one-dimensional array of type + that is the destination of the elements copied from the . The array must have zero-based indexing. + The zero-based index in at which copying + begins. + is a null reference + (Nothing in Visual Basic). + is less than + 0. + is equal to or greater than + the length of the . -or- The number of elements in the source + is greater than the available space from to the end of the destination + . + + + + Copies the key and value pairs stored in the to a + new array. + + A new array containing a snapshot of key and value pairs copied from the . + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToPairs. + + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToEntries. + + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToObjects. + + + + Returns an enumerator that iterates through the . + An enumerator for the . + + The enumerator returned from the dictionary is safe to use concurrently with + reads and writes to the dictionary, however it does not represent a moment-in-time snapshot + of the dictionary. The contents exposed through the enumerator may contain modifications + made to the dictionary after was called. + + + + + Shared internal implementation for inserts and updates. + If key exists, we always return false; and if updateIfExists == true we force update with value; + If key doesn't exist, we always add value and return true; + + + + + Adds a key/value pair to the + if the key does not already exist. + + The key of the element to add. + The function used to generate a value for the key + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The value for the key. This will be either the existing value for the key if the + key is already in the dictionary, or the new value for the key as returned by valueFactory + if the key was not in the dictionary. + + + + Adds a key/value pair to the + if the key does not already exist. + + The key of the element to add. + the value to be added, if the key does not already exist + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The value for the key. This will be either the existing value for the key if the + key is already in the dictionary, or the new value if the key was not in the dictionary. + + + + Adds a key/value pair to the if the key does not already + exist, or updates a key/value pair in the if the key + already exists. + + The key to be added or whose value should be updated + The function used to generate a value for an absent key + The function used to generate a new value for an existing key + based on the key's existing value + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The new value for the key. This will be either be the result of addValueFactory (if the key was + absent) or the result of updateValueFactory (if the key was present). + + + + Adds a key/value pair to the if the key does not already + exist, or updates a key/value pair in the if the key + already exists. + + The key to be added or whose value should be updated + The value to be added for an absent key + The function used to generate a new value for an existing key based on + the key's existing value + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The new value for the key. This will be either be the result of addValueFactory (if the key was + absent) or the result of updateValueFactory (if the key was present). + + + + Adds the specified key and value to the . + + The object to use as the key of the element to add. + The object to use as the value of the element to add. + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + + An element with the same key already exists in the . + + + + Removes the element with the specified key from the . + + The key of the element to remove. + true if the element is successfully remove; otherwise false. This method also returns + false if + was not found in the original . + + is a null reference + (Nothing in Visual Basic). + + + + Adds the specified value to the + with the specified key. + + The + structure representing the key and value to add to the . + The of is null. + The + contains too many elements. + An element with the same key already exists in the + + + + + Determines whether the + contains a specific key and value. + + The + structure to locate in the . + true if the is found in the ; otherwise, false. + + + + Removes a key and value from the dictionary. + + The + structure representing the key and value to remove from the . + true if the key and value represented by is successfully + found and removed; otherwise, false. + The Key property of is a null reference (Nothing in Visual Basic). + + + Returns an enumerator that iterates through the . + An enumerator for the . + + The enumerator returned from the dictionary is safe to use concurrently with + reads and writes to the dictionary, however it does not represent a moment-in-time snapshot + of the dictionary. The contents exposed through the enumerator may contain modifications + made to the dictionary after was called. + + + + + Adds the specified key and value to the dictionary. + + The object to use as the key. + The object to use as the value. + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + + is of a type that is not assignable to the key type of the . -or- + is of a type that is not assignable to , + the type of values in the . + -or- A value with the same key already exists in the . + + + + + Gets whether the contains an + element with the specified key. + + The key to locate in the . + true if the contains + an element with the specified key; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + Provides an for the + . + An for the . + + + + Removes the element with the specified key from the . + + The key of the element to remove. + is a null reference + (Nothing in Visual Basic). + + + + Copies the elements of the to an array, starting + at the specified array index. + + The one-dimensional array that is the destination of the elements copied from + the . The array must have zero-based + indexing. + The zero-based index in at which copying + begins. + is a null reference + (Nothing in Visual Basic). + is less than + 0. + is equal to or greater than + the length of the . -or- The number of elements in the source + is greater than the available space from to the end of the destination + . + + + + Replaces the internal table with a larger one. To prevent multiple threads from resizing the + table as a result of races, the table of buckets that was deemed too small is passed in as + an argument to GrowTable(). GrowTable() obtains a lock, and then checks whether the bucket + table has been replaced in the meantime or not. + + Reference to the bucket table that was deemed too small. + + + + Computes the bucket and lock number for a particular key. + + + + + Acquires all locks for this hash table, and increments locksAcquired by the number + of locks that were successfully acquired. The locks are acquired in an increasing + order. + + + + + Acquires a contiguous range of locks for this hash table, and increments locksAcquired + by the number of locks that were successfully acquired. The locks are acquired in an + increasing order. + + + + + Releases a contiguous range of locks. + + + + + Gets a collection containing the keys in the dictionary. + + + + + Gets a collection containing the values in the dictionary. + + + + + A helper method for asserts. + + + + + Get the data array to be serialized + + + + + Construct the dictionary from a previously seiralized one + + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key. If the specified key is not found, a get + operation throws a + , and a set operation creates a new + element with the specified key. + is a null reference + (Nothing in Visual Basic). + The property is retrieved and + + does not exist in the collection. + + + + Gets the number of key/value pairs contained in the . + + The dictionary contains too many + elements. + The number of key/value paris contained in the . + Count has snapshot semantics and represents the number of items in the + at the moment when Count was accessed. + + + + Gets a value that indicates whether the is empty. + + true if the is empty; otherwise, + false. + + + + Gets a collection containing the keys in the . + + An containing the keys in the + . + + + + Gets a collection containing the values in the . + + An containing the values in + the + . + + + + Gets a value indicating whether the dictionary is read-only. + + true if the is + read-only; otherwise, false. For , this property always returns + false. + + + + Gets a value indicating whether the has a fixed size. + + true if the has a + fixed size; otherwise, false. For , this property always + returns false. + + + + Gets a value indicating whether the is read-only. + + true if the is + read-only; otherwise, false. For , this property always + returns false. + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + + Gets an containing the values in the . + + An containing the values in the . + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key, or a null reference (Nothing in Visual Basic) + if is not in the dictionary or is of a type that is + not assignable to the key type of the . + is a null reference + (Nothing in Visual Basic). + + A value is being assigned, and is of a type that is not assignable to the + key type of the . -or- A value is being + assigned, and is of a type that is not assignable to the value type + of the + + + + + Gets a value indicating whether access to the is + synchronized with the SyncRoot. + + true if access to the is synchronized + (thread safe); otherwise, false. For , this property always + returns false. + + + + Gets an object that can be used to synchronize access to the . This property is not supported. + + The SyncRoot property is not supported. + + + + The number of concurrent writes for which to optimize by default. + + + + + A node in a singly-linked list representing a particular hash table bucket. + + + + + A private class to represent enumeration over the dictionary that implements the + IDictionaryEnumerator interface. + + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + Represents an asynchronous method builder. + + + A cached VoidTaskResult task used for builders that complete synchronously. + + + The generic builder object to which this non-generic instance delegates. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state. + + The builder is not initialized. + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + + Gets the for this builder. + The representing the builder's asynchronous operation. + The builder is not initialized. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + Holds state related to the builder's IAsyncStateMachine. + This is a mutable struct. Be very delicate with it. + + + A reference to the heap-allocated state machine object associated with this builder. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument is null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + + Gets the Action to use with an awaiter's OnCompleted or UnsafeOnCompleted method. + On first invocation, the supplied state machine will be boxed. + + Specifies the type of the method builder used. + Specifies the type of the state machine used. + The builder. + The state machine. + An Action to provide to the awaiter. + + + Provides the ability to invoke a state machine's MoveNext method under a supplied ExecutionContext. + + + The context with which to run MoveNext. + + + The state machine whose MoveNext method should be invoked. + + + Initializes the runner. + The context with which to run MoveNext. + + + Invokes MoveNext under the provided context. + + + Cached delegate used with ExecutionContext.Run. + + + Invokes the MoveNext method on the supplied IAsyncStateMachine. + The IAsyncStateMachine machine instance. + + + + Provides a builder for asynchronous methods that return void. + This type is intended for compiler use only. + + + + The synchronization context associated with this operation. + + + State related to the IAsyncStateMachine. + + + An object used by the debugger to uniquely identify this builder. Lazily initialized. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Registers with UnobservedTaskException to suppress exception crashing. + + + Non-zero if PreventUnobservedTaskExceptions has already been invoked. + + + Initializes a new . + The initialized . + + + Initializes the . + The synchronizationContext associated with this operation. This may be null. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument was null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + Completes the method builder successfully. + + + Faults the method builder with an exception. + The exception that is the cause of this fault. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + + + Notifies the current synchronization context that the operation completed. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger and only in a single-threaded manner. + + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder{TResult} is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + A cached task for default(TResult). + + + State related to the IAsyncStateMachine. + + + The lazily-initialized task. + Must be named m_task for debugger step-over to work correctly. + + + The lazily-initialized task completion source. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state with the specified result. + + The result to use to complete the task. + The task has already completed. + + + + Completes the builder by using either the supplied completed task, or by completing + the builder's previously accessed task using default(TResult). + + A task already completed with the value default(TResult). + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + This should only be invoked from within an asynchronous method, + and only by the debugger. + + + + + Gets a task for the specified result. This will either + be a cached or new task, never null. + + The result for which we need a task. + The completed task containing the result. + + + Gets the lazily-initialized TaskCompletionSource. + + + Gets the for this builder. + The representing the builder's asynchronous operation. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + Provides a base class used to cache tasks of a specific return type. + Specifies the type of results the cached tasks return. + + + + A singleton cache for this result type. + This may be null if there are no cached tasks for this TResult. + + + + Creates a non-disposable task. + The result for the task. + The cacheable task. + + + Creates a cache. + A task cache for this result type. + + + Gets a cached task if one exists. + The result for which we want a cached task. + A cached task if one exists; otherwise, null. + + + Provides a cache for Boolean tasks. + + + A true task. + + + A false task. + + + Gets a cached task for the Boolean result. + true or false + A cached task for the Boolean result. + + + Provides a cache for zero Int32 tasks. + + + The minimum value, inclusive, for which we want a cached task. + + + The maximum value, exclusive, for which we want a cached task. + + + The cache of Task{Int32}. + + + Creates an array of cached tasks for the values in the range [INCLUSIVE_MIN,EXCLUSIVE_MAX). + + + Gets a cached task for the zero Int32 result. + The integer value + A cached task for the Int32 result or null if not cached. + + + + Represents state machines generated for asynchronous methods. + This type is intended for compiler use only. + + + + Moves the state machine to its next state. + + + Configures the state machine with a heap-allocated replica. + The heap-allocated replica. + + + + Represents an awaiter used to schedule continuations when an await operation completes. + + + + + Represents an operation that will schedule continuations when the operation completes. + + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + Unlike OnCompleted, UnsafeOnCompleted need not propagate ExecutionContext information. + + + Used with Task(of void) + + + + An interface similar to the one added in .NET 4.0. + + + + The exception that is thrown in a thread upon cancellation of an operation that the thread was executing. + + + Initializes the exception. + + + Initializes the exception. + The error message that explains the reason for the exception. + + + Initializes the exception. + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + Initializes the exception. + A cancellation token associated with the operation that was canceled. + + + Initializes the exception. + The error message that explains the reason for the exception. + A cancellation token associated with the operation that was canceled. + + + Initializes the exception. + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + A cancellation token associated with the operation that was canceled. + + + Gets a token associated with the operation that was canceled. + + + + A dummy replacement for the .NET internal class StackCrawlMark. + + + + + Propogates notification that operations should be canceled. + + + + A may be created directly in an unchangeable canceled or non-canceled state + using the CancellationToken's constructors. However, to have a CancellationToken that can change + from a non-canceled to a canceled state, + CancellationTokenSource must be used. + CancellationTokenSource exposes the associated CancellationToken that may be canceled by the source through its + Token property. + + + Once canceled, a token may not transition to a non-canceled state, and a token whose + is false will never change to one that can be canceled. + + + All members of this struct are thread-safe and may be used concurrently from multiple threads. + + + + + + Internal constructor only a CancellationTokenSource should create a CancellationToken + + + + + Initializes the CancellationToken. + + + The canceled state for the token. + + + Tokens created with this constructor will remain in the canceled state specified + by the parameter. If is false, + both and will be false. + If is true, + both and will be true. + + + + + Registers a delegate that will be called when this CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + A Boolean value that indicates whether to capture + the current SynchronizationContext and use it + when invoking the . + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The state to pass to the when the delegate is invoked. This may be null. + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The state to pass to the when the delegate is invoked. This may be null. + A Boolean value that indicates whether to capture + the current SynchronizationContext and use it + when invoking the . + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Determines whether the current CancellationToken instance is equal to the + specified token. + + The other CancellationToken to which to compare this + instance. + True if the instances are equal; otherwise, false. Two tokens are equal if they are associated + with the same CancellationTokenSource or if they were both constructed + from public CancellationToken constructors and their values are equal. + + + + Determines whether the current CancellationToken instance is equal to the + specified . + + The other object to which to compare this instance. + True if is a CancellationToken + and if the two instances are equal; otherwise, false. Two tokens are equal if they are associated + with the same CancellationTokenSource or if they were both constructed + from public CancellationToken constructors and their values are equal. + An associated CancellationTokenSource has been disposed. + + + + Serves as a hash function for a CancellationToken. + + A hash code for the current CancellationToken instance. + + + + Determines whether two CancellationToken instances are equal. + + The first instance. + The second instance. + True if the instances are equal; otherwise, false. + An associated CancellationTokenSource has been disposed. + + + + Determines whether two CancellationToken instances are not equal. + + The first instance. + The second instance. + True if the instances are not equal; otherwise, false. + An associated CancellationTokenSource has been disposed. + + + + Throws a OperationCanceledException if + this token has had cancellation requested. + + + This method provides functionality equivalent to: + + if (token.IsCancellationRequested) + throw new OperationCanceledException(token); + + + The token has had cancellation requested. + The associated CancellationTokenSource has been disposed. + + + + Returns an empty CancellationToken value. + + + The value returned by this property will be non-cancelable by default. + + + + + Gets whether cancellation has been requested for this token. + + Whether cancellation has been requested for this token. + + + This property indicates whether cancellation has been requested for this token, + either through the token initially being construted in a canceled state, or through + calling Cancel + on the token's associated . + + + If this property is true, it only guarantees that cancellation has been requested. + It does not guarantee that every registered handler + has finished executing, nor that cancellation requests have finished propagating + to all registered handlers. Additional synchronization may be required, + particularly in situations where related objects are being canceled concurrently. + + + + + + Gets whether this token is capable of being in the canceled state. + + + If CanBeCanceled returns false, it is guaranteed that the token will never transition + into a canceled state, meaning that will never + return true. + + + + + Gets a that is signaled when the token is canceled. + + Accessing this property causes a WaitHandle + to be instantiated. It is preferable to only use this property when necessary, and to then + dispose the associated instance at the earliest opportunity (disposing + the source will dispose of this allocated handle). The handle should not be closed or disposed directly. + + The associated CancellationTokenSource has been disposed. + + + + Represents a callback delegate that has been registered with a CancellationToken. + + + To unregister a callback, dispose the corresponding Registration instance. + + + + + Attempts to deregister the item. If it's already being run, this may fail. + Entails a full memory fence. + + True if the callback was found and deregistered, false otherwise. + + + + Disposes of the registration and unregisters the target callback from the associated + CancellationToken. + If the target callback is currently executing this method will wait until it completes, except + in the degenerate cases where a callback method deregisters itself. + + + + + Determines whether two CancellationTokenRegistration + instances are equal. + + The first instance. + The second instance. + True if the instances are equal; otherwise, false. + + + + Determines whether two CancellationTokenRegistration instances are not equal. + + The first instance. + The second instance. + True if the instances are not equal; otherwise, false. + + + + Determines whether the current CancellationTokenRegistration instance is equal to the + specified . + + The other object to which to compare this instance. + True, if both this and are equal. False, otherwise. + Two CancellationTokenRegistration instances are equal if + they both refer to the output of a single call to the same Register method of a + CancellationToken. + + + + + Determines whether the current CancellationToken instance is equal to the + specified . + + The other CancellationTokenRegistration to which to compare this instance. + True, if both this and are equal. False, otherwise. + Two CancellationTokenRegistration instances are equal if + they both refer to the output of a single call to the same Register method of a + CancellationToken. + + + + + Serves as a hash function for a CancellationTokenRegistration.. + + A hash code for the current CancellationTokenRegistration instance. + + + + Signals to a that it should be canceled. + + + + is used to instantiate a + (via the source's Token property) + that can be handed to operations that wish to be notified of cancellation or that can be used to + register asynchronous operations for cancellation. That token may have cancellation requested by + calling to the source's Cancel + method. + + + All members of this class, except Dispose, are thread-safe and may be used + concurrently from multiple threads. + + + + + The ID of the thread currently executing the main body of CTS.Cancel() + this helps us to know if a call to ctr.Dispose() is running 'within' a cancellation callback. + This is updated as we move between the main thread calling cts.Cancel() and any syncContexts that are used to + actually run the callbacks. + + + + Initializes the . + + + + + Communicates a request for cancellation. + + + + The associated will be + notified of the cancellation and will transition to a state where + IsCancellationRequested returns true. + Any callbacks or cancelable operations + registered with the will be executed. + + + Cancelable operations and callbacks registered with the token should not throw exceptions. + However, this overload of Cancel will aggregate any exceptions thrown into a , + such that one callback throwing an exception will not prevent other registered callbacks from being executed. + + + The that was captured when each callback was registered + will be reestablished when the callback is invoked. + + + An aggregate exception containing all the exceptions thrown + by the registered callbacks on the associated . + This has been disposed. + + + + Communicates a request for cancellation. + + + + The associated will be + notified of the cancellation and will transition to a state where + IsCancellationRequested returns true. + Any callbacks or cancelable operations + registered with the will be executed. + + + Cancelable operations and callbacks registered with the token should not throw exceptions. + If is true, an exception will immediately propagate out of the + call to Cancel, preventing the remaining callbacks and cancelable operations from being processed. + If is false, this overload will aggregate any + exceptions thrown into a , + such that one callback throwing an exception will not prevent other registered callbacks from being executed. + + + The that was captured when each callback was registered + will be reestablished when the callback is invoked. + + + Specifies whether exceptions should immediately propagate. + An aggregate exception containing all the exceptions thrown + by the registered callbacks on the associated . + This has been disposed. + + + + Releases the resources used by this . + + + This method is not thread-safe for any other concurrent calls. + + + + + Throws an exception if the source has been disposed. + + + + + InternalGetStaticSource() + + Whether the source should be set. + A static source to be shared among multiple tokens. + + + + Registers a callback object. If cancellation has already occurred, the + callback will have been run by the time this method returns. + + + + + + + + + + Invoke the Canceled event. + + + The handlers are invoked synchronously in LIFO order. + + + + + Creates a CancellationTokenSource that will be in the canceled state + when any of the source tokens are in the canceled state. + + The first CancellationToken to observe. + The second CancellationToken to observe. + A CancellationTokenSource that is linked + to the source tokens. + A CancellationTokenSource associated with + one of the source tokens has been disposed. + + + + Creates a CancellationTokenSource that will be in the canceled state + when any of the source tokens are in the canceled state. + + The CancellationToken instances to observe. + A CancellationTokenSource that is linked + to the source tokens. + is null. + A CancellationTokenSource associated with + one of the source tokens has been disposed. + + + + Gets whether cancellation has been requested for this CancellationTokenSource. + + Whether cancellation has been requested for this CancellationTokenSource. + + + This property indicates whether cancellation has been requested for this token source, such as + due to a call to its + Cancel method. + + + If this property returns true, it only guarantees that cancellation has been requested. It does not + guarantee that every handler registered with the corresponding token has finished executing, nor + that cancellation requests have finished propagating to all registered handlers. Additional + synchronization may be required, particularly in situations where related objects are being + canceled concurrently. + + + + + + A simple helper to determine whether cancellation has finished. + + + + + A simple helper to determine whether disposal has occured. + + + + + The ID of the thread that is running callbacks. + + + + + Gets the CancellationToken + associated with this . + + The CancellationToken + associated with this . + The token source has been + disposed. + + + + + + + + + + + + + + The currently executing callback + + + + + A helper class for collating the various bits of information required to execute + cancellation callbacks. + + + + + InternalExecuteCallbackSynchronously_GeneralPath + This will be called on the target synchronization context, however, we still need to restore the required execution context + + + + + A sparsely populated array. Elements can be sparse and some null, but this allows for + lock-free additions and growth, and also for constant time removal (by nulling out). + + The kind of elements contained within. + + + + Allocates a new array with the given initial size. + + How many array slots to pre-allocate. + + + + Adds an element in the first available slot, beginning the search from the tail-to-head. + If no slots are available, the array is grown. The method doesn't return until successful. + + The element to add. + Information about where the add happened, to enable O(1) deregistration. + + + + The tail of the doubly linked list. + + + + + A struct to hold a link to the exact spot in an array an element was inserted, enabling + constant time removal later on. + + + + + A fragment of a sparsely populated array, doubly linked. + + The kind of elements contained within. + + + + Provides lazy initialization routines. + + + These routines avoid needing to allocate a dedicated, lazy-initialization instance, instead using + references to ensure targets have been initialized as they are accessed. + + + + + Initializes a target reference type with the type's default constructor if the target has not + already been initialized. + + The refence type of the reference to be initialized. + A reference of type to initialize if it has not + already been initialized. + The initialized reference of type . + Type does not have a default + constructor. + + Permissions to access the constructor of type were missing. + + + + This method may only be used on reference types. To ensure initialization of value + types, see other overloads of EnsureInitialized. + + + This method may be used concurrently by multiple threads to initialize . + In the event that multiple threads access this method concurrently, multiple instances of + may be created, but only one will be stored into . In such an occurrence, this method will not dispose of the + objects that were not stored. If such objects must be disposed, it is up to the caller to determine + if an object was not used and to then dispose of the object appropriately. + + + + + + Initializes a target reference type using the specified function if it has not already been + initialized. + + The reference type of the reference to be initialized. + The reference of type to initialize if it has not + already been initialized. + The invoked to initialize the + reference. + The initialized reference of type . + Type does not have a + default constructor. + returned + null. + + + This method may only be used on reference types, and may + not return a null reference (Nothing in Visual Basic). To ensure initialization of value types or + to allow null reference types, see other overloads of EnsureInitialized. + + + This method may be used concurrently by multiple threads to initialize . + In the event that multiple threads access this method concurrently, multiple instances of + may be created, but only one will be stored into . In such an occurrence, this method will not dispose of the + objects that were not stored. If such objects must be disposed, it is up to the caller to determine + if an object was not used and to then dispose of the object appropriately. + + + + + + Initialize the target using the given delegate (slow path). + + The reference type of the reference to be initialized. + The variable that need to be initialized + The delegate that will be executed to initialize the target + The initialized variable + + + + Initializes a target reference or value type with its default constructor if it has not already + been initialized. + + The type of the reference to be initialized. + A reference or value of type to initialize if it + has not already been initialized. + A reference to a boolean that determines whether the target has already + been initialized. + A reference to an object used as the mutually exclusive lock for initializing + . + The initialized value of type . + + + + Initializes a target reference or value type with a specified function if it has not already been + initialized. + + The type of the reference to be initialized. + A reference or value of type to initialize if it + has not already been initialized. + A reference to a boolean that determines whether the target has already + been initialized. + A reference to an object used as the mutually exclusive lock for initializing + . + The invoked to initialize the + reference or value. + The initialized value of type . + + + + Ensure the target is initialized and return the value (slow path). This overload permits nulls + and also works for value type targets. Uses the supplied function to create the value. + + The type of target. + A reference to the target to be initialized. + A reference to a location tracking whether the target has been initialized. + A reference to a location containing a mutual exclusive lock. + + The to invoke in order to produce the lazily-initialized value. + + The initialized object. + + + + Provides a slimmed down version of . + + + All public and protected members of are thread-safe and may be used + concurrently from multiple threads, with the exception of Dispose, which + must only be used when all other operations on the have + completed, and Reset, which should only be used when no other threads are + accessing the event. + + + + + Initializes a new instance of the + class with an initial state of nonsignaled. + + + + + Initializes a new instance of the + class with a Boolen value indicating whether to set the intial state to signaled. + + true to set the initial state signaled; false to set the initial state + to nonsignaled. + + + + Initializes a new instance of the + class with a Boolen value indicating whether to set the intial state to signaled and a specified + spin count. + + true to set the initial state to signaled; false to set the initial state + to nonsignaled. + The number of spin waits that will occur before falling back to a true + wait. + is less than + 0 or greater than the maximum allowed value. + + + + Initializes the internal state of the event. + + Whether the event is set initially or not. + The spin count that decides when the event will block. + + + + Helper to ensure the lock object is created before first use. + + + + + This method lazily initializes the event object. It uses CAS to guarantee that + many threads racing to call this at once don't result in more than one event + being stored and used. The event will be signaled or unsignaled depending on + the state of the thin-event itself, with synchronization taken into account. + + True if a new event was created and stored, false otherwise. + + + + Sets the state of the event to signaled, which allows one or more threads waiting on the event to + proceed. + + + + + Private helper to actually perform the Set. + + Indicates whether we are calling Set() during cancellation. + The object has been canceled. + + + + Sets the state of the event to nonsignaled, which causes threads to block. + + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + Blocks the current thread until the current is set. + + + The maximum number of waiters has been exceeded. + + + The caller of this method blocks indefinitely until the current instance is set. The caller will + return immediately if the event is currently in a set state. + + + + + Blocks the current thread until the current receives a signal, + while observing a . + + The to + observe. + + The maximum number of waiters has been exceeded. + + was + canceled. + + The caller of this method blocks indefinitely until the current instance is set. The caller will + return immediately if the event is currently in a set state. + + + + + Blocks the current thread until the current is set, using a + to measure the time interval. + + A that represents the number of milliseconds + to wait, or a that represents -1 milliseconds to wait indefinitely. + + true if the was set; otherwise, + false. + is a negative + number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater + than . + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + to measure the time interval, while observing a . + + A that represents the number of milliseconds + to wait, or a that represents -1 milliseconds to wait indefinitely. + + The to + observe. + true if the was set; otherwise, + false. + is a negative + number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater + than . + was canceled. + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + 32-bit signed integer to measure the time interval. + + The number of milliseconds to wait, or (-1) to wait indefinitely. + true if the was set; otherwise, + false. + is a + negative number other than -1, which represents an infinite time-out. + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + 32-bit signed integer to measure the time interval, while observing a . + + The number of milliseconds to wait, or (-1) to wait indefinitely. + The to + observe. + true if the was set; otherwise, + false. + is a + negative number other than -1, which represents an infinite time-out. + + The maximum number of waiters has been exceeded. + + was canceled. + + + + Releases all resources used by the current instance of . + + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + When overridden in a derived class, releases the unmanaged resources used by the + , and optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only unmanaged resources. + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + Throw ObjectDisposedException if the MRES is disposed + + + + + Private helper method to wake up waiters when a cancellationToken gets canceled. + + + + + Private helper method for updating parts of a bit-string state value. + Mainly called from the IsSet and Waiters properties setters + + + Note: the parameter types must be int as CompareExchange cannot take a Uint + + The new value + The mask used to set the bits + + + + Private helper method - performs Mask and shift, particular helpful to extract a field from a packed word. + eg ExtractStatePortionAndShiftRight(0x12345678, 0xFF000000, 24) => 0x12, ie extracting the top 8-bits as a simple integer + + ?? is there a common place to put this rather than being private to MRES? + + + + + + + + + Performs a Mask operation, but does not perform the shift. + This is acceptable for boolean values for which the shift is unnecessary + eg (val & Mask) != 0 is an appropriate way to extract a boolean rather than using + ((val & Mask) >> shiftAmount) == 1 + + ?? is there a common place to put this rather than being private to MRES? + + + + + + + Helper function to measure and update the wait time + + The first time (in Ticks) observed when the wait started. + The orginal wait timeoutout in milliseconds. + The new wait time in milliseconds, -1 if the time expired, -2 if overflow in counters + has occurred. + + + + Gets the underlying object for this . + + The underlying event object fore this . + + Accessing this property forces initialization of an underlying event object if one hasn't + already been created. To simply wait on this , + the public Wait methods should be preferred. + + + + + Gets whether the event is set. + + true if the event has is set; otherwise, false. + + + + Gets the number of spin waits that will be occur before falling back to a true wait. + + + + + How many threads are waiting. + + + + + Provides support for spin-based waiting. + + + + encapsulates common spinning logic. On single-processor machines, yields are + always used instead of busy waits, and on computers with Intel™ processors employing Hyper-Threading™ + technology, it helps to prevent hardware thread starvation. SpinWait encapsulates a good mixture of + spinning and true yielding. + + + is a value type, which means that low-level code can utilize SpinWait without + fear of unnecessary allocation overheads. SpinWait is not generally useful for ordinary applications. + In most cases, you should use the synchronization classes provided by the .NET Framework, such as + . For most purposes where spin waiting is required, however, + the type should be preferred over the System.Threading.Thread.SpinWait method. + + + While SpinWait is designed to be used in concurrent applications, it is not designed to be + used from multiple threads concurrently. SpinWait's members are not thread-safe. If multiple + threads must spin, each should use its own instance of SpinWait. + + + + + + Performs a single spin. + + + This is typically called in a loop, and may change in behavior based on the number of times a + has been called thus far on this instance. + + + + + Resets the spin counter. + + + This makes and behave as though no calls + to had been issued on this instance. If a instance + is reused many times, it may be useful to reset it to avoid yielding too soon. + + + + + Spins until the specified condition is satisfied. + + A delegate to be executed over and over until it returns true. + The argument is null. + + + + Spins until the specified condition is satisfied or until the specified timeout is expired. + + A delegate to be executed over and over until it returns true. + + A that represents the number of milliseconds to wait, + or a TimeSpan that represents -1 milliseconds to wait indefinitely. + True if the condition is satisfied within the timeout; otherwise, false + The argument is null. + is a negative number + other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater than + . + + + + Spins until the specified condition is satisfied or until the specified timeout is expired. + + A delegate to be executed over and over until it returns true. + The number of milliseconds to wait, or (-1) to wait indefinitely. + True if the condition is satisfied within the timeout; otherwise, false + The argument is null. + is a + negative number other than -1, which represents an infinite time-out. + + + + Gets the number of times has been called on this instance. + + + + + Gets whether the next call to will yield the processor, triggering a + forced context switch. + + Whether the next call to will yield the processor, triggering a + forced context switch. + + On a single-CPU machine, always yields the processor. On machines with + multiple CPUs, may yield after an unspecified number of calls. + + + + + A helper class to get the number of preocessors, it updates the numbers of processors every sampling interval + + + + + Gets the number of available processors + + + + + Gets whether the current machine has only a single processor. + + + + + Represents an asynchronous operation that produces a result at some time in the future. + + + The type of the result produced by this . + + + + instances may be created in a variety of ways. The most common approach is by + using the task's property to retrieve a instance that can be used to create tasks for several + purposes. For example, to create a that runs a function, the factory's StartNew + method may be used: + + // C# + var t = Task<int>.Factory.StartNew(() => GenerateResult()); + - or - + var t = Task.Factory.StartNew(() => GenerateResult()); + + ' Visual Basic + Dim t = Task<int>.Factory.StartNew(Function() GenerateResult()) + - or - + Dim t = Task.Factory.StartNew(Function() GenerateResult()) + + + + The class also provides constructors that initialize the task but that do not + schedule it for execution. For performance reasons, the StartNew method should be the + preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation + and scheduling must be separated, the constructors may be used, and the task's + Start + method may then be used to schedule the task for execution at a later time. + + + All members of , except for + Dispose, are thread-safe + and may be used from multiple threads concurrently. + + + + + + Represents an asynchronous operation. + + + + instances may be created in a variety of ways. The most common approach is by + using the Task type's property to retrieve a instance that can be used to create tasks for several + purposes. For example, to create a that runs an action, the factory's StartNew + method may be used: + + // C# + var t = Task.Factory.StartNew(() => DoAction()); + + ' Visual Basic + Dim t = Task.Factory.StartNew(Function() DoAction()) + + + + The class also provides constructors that initialize the Task but that do not + schedule it for execution. For performance reasons, TaskFactory's StartNew method should be the + preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation + and scheduling must be separated, the constructors may be used, and the task's + method may then be used to schedule the task for execution at a later time. + + + All members of , except for , are thread-safe + and may be used from multiple threads concurrently. + + + For operations that return values, the class + should be used. + + + For developers implementing custom debuggers, several internal and private members of Task may be + useful (these may change from release to release). The Int32 m_taskId field serves as the backing + store for the property, however accessing this field directly from a debugger may be + more efficient than accessing the same value through the property's getter method (the + s_taskIdCounter Int32 counter is used to retrieve the next available ID for a Task). Similarly, the + Int32 m_stateFlags field stores information about the current lifecycle stage of the Task, + information also accessible through the property. The m_action System.Object + field stores a reference to the Task's delegate, and the m_stateObject System.Object field stores the + async state passed to the Task by the developer. Finally, for debuggers that parse stack frames, the + InternalWait method serves a potential marker for when a Task is entering a wait operation. + + + + + + A type initializer that runs with the appropriate permissions. + + + + + Initializes a new with the specified action. + + The delegate that represents the code to execute in the Task. + The argument is null. + + + + Initializes a new with the specified action and CancellationToken. + + The delegate that represents the code to execute in the Task. + The CancellationToken + that will be assigned to the new Task. + The argument is null. + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action and creation options. + + The delegate that represents the code to execute in the task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action and creation options. + + The delegate that represents the code to execute in the task. + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action and state. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + + The argument is null. + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + The that will be assigned to the new task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + An internal constructor used by the factory methods on task and its descendent(s). + This variant does not capture the ExecutionContext; it is up to the caller to do that. + + An action to execute. + Optional state to pass to the action. + Parent of Task. + A CancellationToken for the task. + A task scheduler under which the task will run. + Options to control its execution. + Internal options to control its execution + + + + Common logic used by the following internal ctors: + Task() + Task(object action, object state, Task parent, TaskCreationOptions options, TaskScheduler taskScheduler) + + ASSUMES THAT m_creatingTask IS ALREADY SET. + + + Action for task to execute. + Object to which to pass to action (may be null) + Task scheduler on which to run thread (only used by continuation tasks). + A CancellationToken for the Task. + Options to customize behavior of Task. + Internal options to customize behavior of Task. + + + + Checks if we registered a CT callback during construction, and deregisters it. + This should be called when we know the registration isn't useful anymore. Specifically from Finish() if the task has completed + successfully or with an exception. + + + + + Captures the ExecutionContext so long as flow isn't suppressed. + + A stack crawl mark pointing to the frame of the caller. + + + + Internal function that will be called by a new child task to add itself to + the children list of the parent (this). + + Since a child task can only be created from the thread executing the action delegate + of this task, reentrancy is neither required nor supported. This should not be called from + anywhere other than the task construction/initialization codepaths. + + + + + Starts the , scheduling it for execution to the current TaskScheduler. + + + A task may only be started and run only once. Any attempts to schedule a task a second time + will result in an exception. + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Starts the , scheduling it for execution to the specified TaskScheduler. + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + The TaskScheduler with which to associate + and execute this task. + + + The argument is null. + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Runs the synchronously on the current TaskScheduler. + + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + Tasks executed with will be associated with the current TaskScheduler. + + + If the target scheduler does not support running this Task on the current thread, the Task will + be scheduled for execution on the scheduler, and the current thread will block until the + Task has completed execution. + + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Runs the synchronously on the scheduler provided. + + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + If the target scheduler does not support running this Task on the current thread, the Task will + be scheduled for execution on the scheduler, and the current thread will block until the + Task has completed execution. + + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + The parameter + is null. + The scheduler on which to attempt to run this task inline. + + + + Throws an exception if the task has been disposed, and hence can no longer be accessed. + + The task has been disposed. + + + + Sets the internal completion event. + + + + + Disposes the , releasing all of its unmanaged resources. + + + Unlike most of the members of , this method is not thread-safe. + Also, may only be called on a that is in one of + the final states: RanToCompletion, + Faulted, or + Canceled. + + + The exception that is thrown if the is not in + one of the final states: RanToCompletion, + Faulted, or + Canceled. + + + + + Disposes the , releasing all of its unmanaged resources. + + + A Boolean value that indicates whether this method is being called due to a call to . + + + Unlike most of the members of , this method is not thread-safe. + + + + + Schedules the task for execution. + + If true, TASK_STATE_STARTED bit is turned on in + an atomic fashion, making sure that TASK_STATE_CANCELED does not get set + underneath us. If false, TASK_STATE_STARTED bit is OR-ed right in. This + allows us to streamline things a bit for StartNew(), where competing cancellations + are not a problem. + + + + Adds an exception to the list of exceptions this task has thrown. + + An object representing either an Exception or a collection of Exceptions. + + + + Returns a list of exceptions by aggregating the holder's contents. Or null if + no exceptions have been thrown. + + Whether to include a TCE if cancelled. + An aggregate exception, or null if no exceptions have been caught. + + + + Throws an aggregate exception if the task contains exceptions. + + + + + Checks whether this is an attached task, and whether we are being called by the parent task. + And sets the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag based on that. + + This is meant to be used internally when throwing an exception, and when WaitAll is gathering + exceptions for tasks it waited on. If this flag gets set, the implicit wait on children + will skip exceptions to prevent duplication. + + This should only be called when this task has completed with an exception + + + + + + Signals completion of this particular task. + + The bUserDelegateExecuted parameter indicates whether this Finish() call comes following the + full execution of the user delegate. + + If bUserDelegateExecuted is false, it mean user delegate wasn't invoked at all (either due to + a cancellation request, or because this task is a promise style Task). In this case, the steps + involving child tasks (i.e. WaitForChildren) will be skipped. + + + + + + FinishStageTwo is to be executed as soon as we known there are no more children to complete. + It can happen i) either on the thread that originally executed this task (if no children were spawned, or they all completed by the time this task's delegate quit) + ii) or on the thread that executed the last child. + + + + + Final stage of the task completion code path. Notifies the parent (if any) that another of its childre are done, and runs continuations. + This function is only separated out from FinishStageTwo because these two operations are also needed to be called from CancellationCleanupLogic() + + + + + This is called by children of this task when they are completed. + + + + + This is to be called just before the task does its final state transition. + It traverses the list of exceptional children, and appends their aggregate exceptions into this one's exception list + + + + + Special purpose Finish() entry point to be used when the task delegate throws a ThreadAbortedException + This makes a note in the state flags so that we avoid any costly synchronous operations in the finish codepath + such as inlined continuations + + + Indicates whether the ThreadAbortException was added to this task's exception holder. + This should always be true except for the case of non-root self replicating task copies. + + Whether the delegate was executed. + + + + Executes the task. This method will only be called once, and handles bookeeping associated with + self-replicating tasks, in addition to performing necessary exception marshaling. + + The task has already been disposed. + + + + IThreadPoolWorkItem override, which is the entry function for this task when the TP scheduler decides to run it. + + + + + + Outermost entry function to execute this task. Handles all aspects of executing a task on the caller thread. + Currently this is called by IThreadPoolWorkItem.ExecuteWorkItem(), and TaskManager.TryExecuteInline. + + + Performs atomic updates to prevent double execution. Should only be set to true + in codepaths servicing user provided TaskSchedulers. The ConcRT or ThreadPool schedulers don't need this. + + + + The actual code which invokes the body of the task. This can be overriden in derived types. + + + + + Alternate InnerInvoke prototype to be called from ExecuteSelfReplicating() so that + the Parallel Debugger can discover the actual task being invoked. + Details: Here, InnerInvoke is actually being called on the rootTask object while we are actually executing the + childTask. And the debugger needs to discover the childTask, so we pass that down as an argument. + The NoOptimization and NoInlining flags ensure that the childTask pointer is retained, and that this + function appears on the callstack. + + + + + + Performs whatever handling is necessary for an unhandled exception. Normally + this just entails adding the exception to the holder object. + + The exception that went unhandled. + + + + Waits for the to complete execution. + + + The was canceled -or- an exception was thrown during + the execution of the . + + + The has been disposed. + + + + + Waits for the to complete execution. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + true if the completed execution within the allotted time; otherwise, false. + + + The was canceled -or- an exception was thrown during the execution of the . + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + The has been disposed. + + + + + Waits for the to complete execution. + + + A to observe while waiting for the task to complete. + + + The was canceled. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + + + Waits for the to complete execution. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + true if the completed execution within the allotted time; otherwise, + false. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + + + Waits for the to complete execution. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for the task to complete. + + + true if the completed execution within the allotted time; otherwise, false. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + The core wait function, which is only accesible internally. It's meant to be used in places in TPL code where + the current context is known or cached. + + + + + Cancels the . + + Indiactes whether we should only cancel non-invoked tasks. + For the default scheduler this option will only be serviced through TryDequeue. + For custom schedulers we also attempt an atomic state transition. + true if the task was successfully canceled; otherwise, false. + The + has been disposed. + + + + Sets the task's cancellation acknowledged flag. + + + + + Runs all of the continuations, as appropriate. + + + + + Helper function to determine whether the current task is in the state desired by the + continuation kind under evaluation. Three possibilities exist: the task failed with + an unhandled exception (OnFailed), the task was canceled before running (OnAborted), + or the task completed successfully (OnCompletedSuccessfully). Note that the last + one includes completing due to cancellation. + + The continuation options under evaluation. + True if the continuation should be run given the task's current state. + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + The that will be assigned to the new continuation task. + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Converts TaskContinuationOptions to TaskCreationOptions, and also does + some validity checking along the way. + + Incoming TaskContinuationOptions + Outgoing TaskCreationOptions + Outgoing InternalTaskOptions + + + + Registers the continuation and possibly runs it (if the task is already finished). + + The continuation task itself. + TaskScheduler with which to associate continuation task. + Restrictions on when the continuation becomes active. + + + + Waits for all of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + An array of instances on which to wait. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + A to observe while waiting for the tasks to complete. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The was canceled. + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for the tasks to complete. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + Waits for a set of handles in a STA-aware way. In other words, it will wait for each + of the events individually if we're on a STA thread, because MsgWaitForMultipleObjectsEx + can't do a true wait-all due to its hidden message queue event. This is not atomic, + of course, but we only wait on one-way (MRE) events anyway so this is OK. + + An array of wait handles to wait on. + The timeout to use during waits. + The cancellationToken that enables a wait to be canceled. + True if all waits succeeded, false if a timeout occurred. + + + + Internal WaitAll implementation which is meant to be used with small number of tasks, + optimized for Parallel.Invoke and other structured primitives. + + + + + This internal function is only meant to be called by WaitAll() + If the completed task is canceled or it has other exceptions, here we will add those + into the passed in exception list (which will be lazily initialized here). + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + The index of the completed task in the array argument. + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + A to observe while waiting for a task to complete. + + + The index of the completed task in the array argument. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + The was canceled. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for a task to complete. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + Gets a unique ID for this Task instance. + + + Task IDs are assigned on-demand and do not necessarily represent the order in the which Task + instances were created. + + + + + Returns the unique ID of the currently executing Task. + + + + + Gets the Task instance currently executing, or + null if none exists. + + + + + Gets the Exception that caused the Task to end prematurely. If the Task completed successfully or has not yet thrown any + exceptions, this will return null. + + + Tasks that throw unhandled exceptions store the resulting exception and propagate it wrapped in a + in calls to Wait + or in accesses to the property. Any exceptions not observed by the time + the Task instance is garbage collected will be propagated on the finalizer thread. + + + The Task + has been disposed. + + + + + Gets the TaskStatus of this Task. + + + + + Gets whether this Task instance has completed + execution due to being canceled. + + + A Task will complete in Canceled state either if its CancellationToken + was marked for cancellation before the task started executing, or if the task acknowledged the cancellation request on + its already signaled CancellationToken by throwing an + OperationCanceledException2 that bears the same + CancellationToken. + + + + + Returns true if this task has a cancellation token and it was signaled. + To be used internally in execute entry codepaths. + + + + + This internal property provides access to the CancellationToken that was set on the task + when it was constructed. + + + + + Gets whether this threw an OperationCanceledException2 while its CancellationToken was signaled. + + + + + Gets whether this Task has completed. + + + will return true when the Task is in one of the three + final states: RanToCompletion, + Faulted, or + Canceled. + + + + + Checks whether this task has been disposed. + + + + + Gets the TaskCreationOptions used + to create this task. + + + + + Gets a that can be used to wait for the task to + complete. + + + Using the wait functionality provided by + should be preferred over using for similar + functionality. + + + The has been disposed. + + + + + Gets the state object supplied when the Task was created, + or null if none was supplied. + + + + + Gets an indication of whether the asynchronous operation completed synchronously. + + true if the asynchronous operation completed synchronously; otherwise, false. + + + + Provides access to the TaskScheduler responsible for executing this Task. + + + + + Provides access to factory methods for creating and instances. + + + The factory returned from is a default instance + of , as would result from using + the default constructor on TaskFactory. + + + + + Provides an event that can be used to wait for completion. + Only called by Wait*(), which means that we really do need to instantiate a completion event. + + + + + Determines whether this is the root task of a self replicating group. + + + + + Determines whether the task is a replica itself. + + + + + The property formerly known as IsFaulted. + + + + + Gets whether the completed due to an unhandled exception. + + + If is true, the Task's will be equal to + TaskStatus.Faulted, and its + property will be non-null. + + + + + Checks whether the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag is set, + This will only be used by the implicit wait to prevent double throws + + + + + + Checks whether the body was ever invoked. Used by task scheduler code to verify custom schedulers actually ran the task. + + + + + A structure to hold continuation information. + + + + + Constructs a new continuation structure. + + The task to be activated. + The continuation options. + The scheduler to use for the continuation. + + + + Invokes the continuation for the target completion task. + + The completed task. + Whether the continuation can be inlined. + + + + Initializes a new with the specified function. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + + The argument is null. + + + + + Initializes a new with the specified function. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + The to be assigned to this task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified function and creation options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified function and creation options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified function and state. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the action. + + The argument is null. + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + The to be assigned to the new task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + The to be assigned to the new task. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Creates a new future object. + + The parent task for this future. + A function that yields the future value. + The task scheduler which will be used to execute the future. + The CancellationToken for the task. + Options to control the future's behavior. + Internal options to control the future's behavior. + The argument specifies + a SelfReplicating , which is illegal."/>. + + + + Creates a new future object. + + The parent task for this future. + An object containing data to be used by the action; may be null. + A function that yields the future value. + The CancellationToken for the task. + The task scheduler which will be used to execute the future. + Options to control the future's behavior. + Internal options to control the future's behavior. + The argument specifies + a SelfReplicating , which is illegal."/>. + + + + Evaluates the value selector of the Task which is passed in as an object and stores the result. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new task. + A new continuation . + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The , when executed, should return a . This task's completion state will be transferred to the task returned + from the ContinueWith call. + + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be passed as + an argument this completed task. + + The that will be assigned to the new task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The , when executed, should return a . + This task's completion state will be transferred to the task returned from the + ContinueWith call. + + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Gets the result value of this . + + + The get accessor for this property ensures that the asynchronous operation is complete before + returning. Once the result of the computation is available, it is stored and will be returned + immediately on later calls to . + + + + + Provides access to factory methods for creating instances. + + + The factory returned from is a default instance + of , as would result from using + the default constructor on the factory type. + + + + + Provides support for creating and scheduling + Task{TResult} objects. + + The type of the results that are available though + the Task{TResult} objects that are associated with + the methods in this class. + + + There are many common patterns for which tasks are relevant. The + class encodes some of these patterns into methods that pick up default settings, which are + configurable through its constructors. + + + A default instance of is available through the + Task{TResult}.Factory property. + + + + + + Initializes a instance with the default configuration. + + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the default configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The + TaskScheduler to use to schedule any tasks created with this TaskFactory{TResult}. A null value + indicates that the current TaskScheduler should be used. + + + With this constructor, the + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to , unless it's null, in which case the property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}. + + + The exception that is thrown when the + argument or the + argument specifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}. + + + The default + TaskScheduler to use to schedule any Tasks created with this TaskFactory{TResult}. A null value + indicates that TaskScheduler.Current should be used. + + + The exception that is thrown when the + argument or the + argumentspecifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to + , unless it's null, in which case the property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new task. + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The that will be assigned to the new task. + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Gets the default CancellationToken of this + TaskFactory. + + + This property returns the default that will be assigned to all + tasks created by this factory unless another CancellationToken value is explicitly specified + during the call to the factory methods. + + + + + Gets the TaskScheduler of this + TaskFactory{TResult}. + + + This property returns the default scheduler for this factory. It will be used to schedule all + tasks unless another scheduler is explicitly specified during calls to this factory's methods. + If null, TaskScheduler.Current + will be used. + + + + + Gets the TaskCreationOptions + value of this TaskFactory{TResult}. + + + This property returns the default creation options for this factory. They will be used to create all + tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Gets the TaskContinuationOptions + value of this TaskFactory{TResult}. + + + This property returns the default continuation options for this factory. They will be used to create + all continuation tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Represents the current stage in the lifecycle of a . + + + + + The task has been initialized but has not yet been scheduled. + + + + + The task is waiting to be activated and scheduled internally by the .NET Framework infrastructure. + + + + + The task has been scheduled for execution but has not yet begun executing. + + + + + The task is running but has not yet completed. + + + + + The task has finished executing and is implicitly waiting for + attached child tasks to complete. + + + + + The task completed execution successfully. + + + + + The task acknowledged cancellation by throwing an OperationCanceledException2 with its own CancellationToken + while the token was in signaled state, or the task's CancellationToken was already signaled before the + task started executing. + + + + + The task completed due to an unhandled exception. + + + + + Specifies flags that control optional behavior for the creation and execution of tasks. + + + + + Specifies that the default behavior should be used. + + + + + A hint to a TaskScheduler to schedule a + task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to + be run sooner, and tasks scheduled later will be more likely to be run later. + + + + + Specifies that a task will be a long-running, course-grained operation. It provides a hint to the + TaskScheduler that oversubscription may be + warranted. + + + + + Specifies that a task is attached to a parent in the task hierarchy. + + + + + Task creation flags which are only used internally. + + + + Specifies "No internal task options" + + + Used to filter out internal vs. public task creation options. + + + Specifies that the task will be queued by the runtime before handing it over to the user. + This flag will be used to skip the cancellationtoken registration step, which is only meant for unstarted tasks. + + + + Specifies flags that control optional behavior for the creation and execution of continuation tasks. + + + + + Default = "Continue on any, no task options, run asynchronously" + Specifies that the default behavior should be used. Continuations, by default, will + be scheduled when the antecedent task completes, regardless of the task's final TaskStatus. + + + + + A hint to a TaskScheduler to schedule a + task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to + be run sooner, and tasks scheduled later will be more likely to be run later. + + + + + Specifies that a task will be a long-running, course-grained operation. It provides + a hint to the TaskScheduler that + oversubscription may be warranted. + + + + + Specifies that a task is attached to a parent in the task hierarchy. + + + + + Specifies that the continuation task should not be scheduled if its antecedent ran to completion. + This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should not be scheduled if its antecedent threw an unhandled + exception. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should not be scheduled if its antecedent was canceled. This + option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent ran to + completion. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent threw an + unhandled exception. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent was canceled. + This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be executed synchronously. With this option + specified, the continuation will be run on the same thread that causes the antecedent task to + transition into its final state. If the antecedent is already complete when the continuation is + created, the continuation will run on the thread creating the continuation. Only very + short-running continuations should be executed synchronously. + + + + + Represents an exception used to communicate task cancellation. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + class with a specified error message and a reference to the inner exception that is the cause of + this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + + Initializes a new instance of the class + with a reference to the that has been canceled. + + A task that has been canceled. + + + + Gets the task associated with this exception. + + + It is permissible for no Task to be associated with a + , in which case + this property will return null. + + + + + Represents the producer side of a unbound to a + delegate, providing access to the consumer side through the property. + + + + It is often the case that a is desired to + represent another asynchronous operation. + TaskCompletionSource is provided for this purpose. It enables + the creation of a task that can be handed out to consumers, and those consumers can use the members + of the task as they would any other. However, unlike most tasks, the state of a task created by a + TaskCompletionSource is controlled explicitly by the methods on TaskCompletionSource. This enables the + completion of the external asynchronous operation to be propagated to the underlying Task. The + separation also ensures that consumers are not able to transition the state without access to the + corresponding TaskCompletionSource. + + + All members of are thread-safe + and may be used from multiple threads concurrently. + + + The type of the result value assocatied with this . + + + + Creates a . + + + + + Creates a + with the specified options. + + + The created + by this instance and accessible through its property + will be instantiated using the specified . + + The options to use when creating the underlying + . + + The represent options invalid for use + with a . + + + + + Creates a + with the specified state. + + The state to use as the underlying + 's AsyncState. + + + + Creates a with + the specified state and options. + + The options to use when creating the underlying + . + The state to use as the underlying + 's AsyncState. + + The represent options invalid for use + with a . + + + + + Attempts to transition the underlying + into the + Faulted + state. + + The exception to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The argument is null. + The was disposed. + + + + Attempts to transition the underlying + into the + Faulted + state. + + The collection of exceptions to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The argument is null. + There are one or more null elements in . + The collection is empty. + The was disposed. + + + + Transitions the underlying + into the + Faulted + state. + + The exception to bind to this . + The argument is null. + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + Faulted + state. + + The collection of exceptions to bind to this . + The argument is null. + There are one or more null elements in . + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Attempts to transition the underlying + into the + RanToCompletion + state. + + The result value to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + RanToCompletion + state. + + The result value to bind to this . + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + Canceled + state. + + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Attempts to transition the underlying + into the + Canceled + state. + + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Gets the created + by this . + + + This property enables a consumer access to the that is controlled by this instance. + The , , + , and + methods (and their "Try" variants) on this instance all result in the relevant state + transitions on this underlying Task. + + + + + An exception holder manages a list of exceptions for one particular task. + It offers the ability to aggregate, but more importantly, also offers intrinsic + support for propagating unhandled exceptions that are never observed. It does + this by aggregating and throwing if the holder is ever GC'd without the holder's + contents ever having been requested (e.g. by a Task.Wait, Task.get_Exception, etc). + + + + + Creates a new holder; it will be registered for finalization. + + The task this holder belongs to. + + + + A finalizer that repropagates unhandled exceptions. + + + + + Add an exception to the internal list. This will ensure the holder is + in the proper state (handled/unhandled) depending on the list's contents. + + An exception object (either an Exception or an + IEnumerable{Exception}) to add to the list. + + + + A private helper method that ensures the holder is considered + unhandled, i.e. it is registered for finalization. + + + + + A private helper method that ensures the holder is considered + handled, i.e. it is not registered for finalization. + + Whether this is called from the finalizer thread. + + + + Allocates a new aggregate exception and adds the contents of the list to + it. By calling this method, the holder assumes exceptions to have been + "observed", such that the finalization check will be subsequently skipped. + + Whether this is being called from a finalizer. + An extra exception to be included (optionally). + The aggregate exception to throw. + + + + Provides a set of static (Shared in Visual Basic) methods for working with specific kinds of + instances. + + + + + Creates a proxy Task that represents the + asynchronous operation of a Task{Task}. + + + It is often useful to be able to return a Task from a + Task{TResult}, where the inner Task represents work done as part of the outer Task{TResult}. However, + doing so results in a Task{Task}, which, if not dealt with carefully, could produce unexpected behavior. Unwrap + solves this problem by creating a proxy Task that represents the entire asynchronous operation of such a Task{Task}. + + The Task{Task} to unwrap. + The exception that is thrown if the + argument is null. + A Task that represents the asynchronous operation of the provided Task{Task}. + + + + Creates a proxy Task{TResult} that represents the + asynchronous operation of a Task{Task{TResult}}. + + + It is often useful to be able to return a Task{TResult} from a Task{TResult}, where the inner Task{TResult} + represents work done as part of the outer Task{TResult}. However, doing so results in a Task{Task{TResult}}, + which, if not dealt with carefully, could produce unexpected behavior. Unwrap solves this problem by + creating a proxy Task{TResult} that represents the entire asynchronous operation of such a Task{Task{TResult}}. + + The Task{Task{TResult}} to unwrap. + The exception that is thrown if the + argument is null. + A Task{TResult} that represents the asynchronous operation of the provided Task{Task{TResult}}. /// Unwraps a Task that returns another Task. + + + + Provides support for creating and scheduling + Tasks. + + + + There are many common patterns for which tasks are relevant. The + class encodes some of these patterns into methods that pick up default settings, which are + configurable through its constructors. + + + A default instance of is available through the + Task.Factory property. + + + + + + Initializes a instance with the default configuration. + + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The + TaskScheduler to use to schedule any tasks created with this TaskFactory. A null value + indicates that the current TaskScheduler should be used. + + + With this constructor, the + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to , unless it's null, in which case the property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory. + + + The exception that is thrown when the + argument or the + argument specifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory. + + + The default + TaskScheduler to use to schedule any Tasks created with this TaskFactory. A null value + indicates that TaskScheduler.Current should be used. + + + The exception that is thrown when the + argument or the + argumentspecifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to + , unless it's null, in which case the property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The started Task. + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors + and then calling + Start to schedule it for execution. However, + unless creation and scheduling must be separated, StartNew is the recommended + approach for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The that will be assigned to the new task. + The started Task. + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors + and then calling + Start to schedule it for execution. However, + unless creation and scheduling must be separated, StartNew is the recommended + approach for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The that will be assigned to the new + A TaskCreationOptions value that controls the behavior of the + created + Task. + The TaskScheduler + that is used to schedule the created Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The started Task. + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The that will be assigned to the new + The started Task. + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The TaskScheduler + that is used to schedule the created Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the asynchronous + operation. + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the asynchronous + operation. + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the asynchronous + operation. + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Check validity of options passed to FromAsync method + + The options to be validated. + determines type of FromAsync method that called this method + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Gets the default CancellationToken of this + TaskFactory. + + + This property returns the default that will be assigned to all + tasks created by this factory unless another CancellationToken value is explicitly specified + during the call to the factory methods. + + + + + Gets the TaskScheduler of this + TaskFactory. + + + This property returns the default scheduler for this factory. It will be used to schedule all + tasks unless another scheduler is explicitly specified during calls to this factory's methods. + If null, TaskScheduler.Current + will be used. + + + + + Gets the TaskCreationOptions + value of this TaskFactory. + + + This property returns the default creation options for this factory. They will be used to create all + tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Gets the TaskContinuationOptions + value of this TaskFactory. + + + This property returns the default continuation options for this factory. They will be used to create + all continuation tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Represents an abstract scheduler for tasks. + + + + TaskScheduler acts as the extension point for all + pluggable scheduling logic. This includes mechanisms such as how to schedule a task for execution, and + how scheduled tasks should be exposed to debuggers. + + + All members of the abstract type are thread-safe + and may be used from multiple threads concurrently. + + + + + + Queues a Task to the scheduler. + + + + A class derived from TaskScheduler + implements this method to accept tasks being scheduled on the scheduler. + A typical implementation would store the task in an internal data structure, which would + be serviced by threads that would execute those tasks at some time in the future. + + + This method is only meant to be called by the .NET Framework and + should not be called directly by the derived class. This is necessary + for maintaining the consistency of the system. + + + The Task to be queued. + The argument is null. + + + + Determines whether the provided Task + can be executed synchronously in this call, and if it can, executes it. + + + + A class derived from TaskScheduler implements this function to + support inline execution of a task on a thread that initiates a wait on that task object. Inline + execution is optional, and the request may be rejected by returning false. However, better + scalability typically results the more tasks that can be inlined, and in fact a scheduler that + inlines too little may be prone to deadlocks. A proper implementation should ensure that a + request executing under the policies guaranteed by the scheduler can successfully inline. For + example, if a scheduler uses a dedicated thread to execute tasks, any inlining requests from that + thread should succeed. + + + If a scheduler decides to perform the inline execution, it should do so by calling to the base + TaskScheduler's + TryExecuteTask method with the provided task object, propagating + the return value. It may also be appropriate for the scheduler to remove an inlined task from its + internal data structures if it decides to honor the inlining request. Note, however, that under + some circumstances a scheduler may be asked to inline a task that was not previously provided to + it with the method. + + + The derived scheduler is responsible for making sure that the calling thread is suitable for + executing the given task as far as its own scheduling and execution policies are concerned. + + + The Task to be + executed. + A Boolean denoting whether or not task has previously been + queued. If this parameter is True, then the task may have been previously queued (scheduled); if + False, then the task is known not to have been queued, and this call is being made in order to + execute the task inline without queueing it. + A Boolean value indicating whether the task was executed inline. + The argument is + null. + The was already + executed. + + + + Generates an enumerable of Task instances + currently queued to the scheduler waiting to be executed. + + + + A class derived from implements this method in order to support + integration with debuggers. This method will only be invoked by the .NET Framework when the + debugger requests access to the data. The enumerable returned will be traversed by debugging + utilities to access the tasks currently queued to this scheduler, enabling the debugger to + provide a representation of this information in the user interface. + + + It is important to note that, when this method is called, all other threads in the process will + be frozen. Therefore, it's important to avoid synchronization with other threads that may lead to + blocking. If synchronization is necessary, the method should prefer to throw a + than to block, which could cause a debugger to experience delays. Additionally, this method and + the enumerable returned must not modify any globally visible state. + + + The returned enumerable should never be null. If there are currently no queued tasks, an empty + enumerable should be returned instead. + + + For developers implementing a custom debugger, this method shouldn't be called directly, but + rather this functionality should be accessed through the internal wrapper method + GetScheduledTasksForDebugger: + internal Task[] GetScheduledTasksForDebugger(). This method returns an array of tasks, + rather than an enumerable. In order to retrieve a list of active schedulers, a debugger may use + another internal method: internal static TaskScheduler[] GetTaskSchedulersForDebugger(). + This static method returns an array of all active TaskScheduler instances. + GetScheduledTasksForDebugger then may be used on each of these scheduler instances to retrieve + the list of scheduled tasks for each. + + + An enumerable that allows traversal of tasks currently queued to this scheduler. + + + This scheduler is unable to generate a list of queued tasks at this time. + + + + + Retrieves some thread static state that can be cached and passed to multiple + TryRunInline calls, avoiding superflous TLS fetches. + + A bag of TLS state (or null if none exists). + + + + Attempts to execute the target task synchronously. + + The task to run. + True if the task may have been previously queued, + false if the task was absolutely not previously queued. + The state retrieved from GetThreadStatics + True if it ran, false otherwise. + + + + Attempts to dequeue a Task that was previously queued to + this scheduler. + + The Task to be dequeued. + A Boolean denoting whether the argument was successfully dequeued. + The argument is null. + + + + Notifies the scheduler that a work item has made progress. + + + + + Initializes the . + + + + + Frees all resources associated with this scheduler. + + + + + Creates a + associated with the current . + + + All Task instances queued to + the returned scheduler will be executed through a call to the + Post method + on that context. + + + A associated with + the current SynchronizationContext, as + determined by SynchronizationContext.Current. + + + The current SynchronizationContext may not be used as a TaskScheduler. + + + + + Attempts to execute the provided Task + on this scheduler. + + + + Scheduler implementations are provided with Task + instances to be executed through either the method or the + method. When the scheduler deems it appropriate to run the + provided task, should be used to do so. TryExecuteTask handles all + aspects of executing a task, including action invocation, exception handling, state management, + and lifecycle control. + + + must only be used for tasks provided to this scheduler by the .NET + Framework infrastructure. It should not be used to execute arbitrary tasks obtained through + custom mechanisms. + + + + A Task object to be executed. + + The is not associated with this scheduler. + + A Boolean that is true if was successfully executed, false if it + was not. A common reason for execution failure is that the task had previously been executed or + is in the process of being executed by another thread. + + + + Provides an array of all queued Task instances + for the debugger. + + + The returned array is populated through a call to . + Note that this function is only meant to be invoked by a debugger remotely. + It should not be called by any other codepaths. + + An array of Task instances. + + This scheduler is unable to generate a list of queued tasks at this time. + + + + + Provides an array of all active TaskScheduler + instances for the debugger. + + + This function is only meant to be invoked by a debugger remotely. + It should not be called by any other codepaths. + + An array of TaskScheduler instances. + + + + Registers a new TaskScheduler instance in the global collection of schedulers. + + + + + Removes a TaskScheduler instance from the global collection of schedulers. + + + + + Indicates the maximum concurrency level this + is able to support. + + + + + Indicates whether this is a custom scheduler, in which case the safe code paths will be taken upon task entry + using a CAS to transition from queued state to executing. + + + + + Gets the default TaskScheduler instance. + + + + + Gets the TaskScheduler + associated with the currently executing task. + + + When not called from within a task, will return the scheduler. + + + + + Gets the unique ID for this . + + + + + Occurs when a faulted 's unobserved exception is about to trigger exception escalation + policy, which, by default, would terminate the process. + + + This AppDomain-wide event provides a mechanism to prevent exception + escalation policy (which, by default, terminates the process) from triggering. + Each handler is passed a + instance, which may be used to examine the exception and to mark it as observed. + + + + + Nested class that provides debugger view for TaskScheduler + + + + Default thread pool scheduler. + + + + A TaskScheduler implementation that executes all tasks queued to it through a call to + on the + that its associated with. The default constructor for this class binds to the current + + + + + Constructs a SynchronizationContextTaskScheduler associated with + + This constructor expects to be set. + + + + Implemetation of for this scheduler class. + + Simply posts the tasks to be executed on the associated . + + + + + + Implementation of for this scheduler class. + + The task will be executed inline only if the call happens within + the associated . + + + + + + + Implementes the property for + this scheduler class. + + By default it returns 1, because a based + scheduler only supports execution on a single thread. + + + + + Provides data for the event that is raised when a faulted 's + exception goes unobserved. + + + The Exception property is used to examine the exception without marking it + as observed, whereas the method is used to mark the exception + as observed. Marking the exception as observed prevents it from triggering exception escalation policy + which, by default, terminates the process. + + + + + Initializes a new instance of the class + with the unobserved exception. + + The Exception that has gone unobserved. + + + + Marks the as "observed," thus preventing it + from triggering exception escalation policy which, by default, terminates the process. + + + + + Gets whether this exception has been marked as "observed." + + + + + The Exception that went unobserved. + + + + + Represents an exception used to communicate an invalid operation by a + . + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + class using the default error message and a reference to the inner exception that is the cause of + this exception. + + The exception that is the cause of the current exception. + + + + Initializes a new instance of the + class with a specified error message and a reference to the inner exception that is the cause of + this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/ensureRedirect.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4-windowsphone71/ensureRedirect.xml new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Runtime.dll b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Runtime.dll new file mode 100644 index 0000000..fa831ad Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Runtime.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Runtime.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Runtime.xml new file mode 100644 index 0000000..93cb00d --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Runtime.xml @@ -0,0 +1,56 @@ + + + + System.Runtime + + + + Defines a provider for progress updates. + The type of progress update value. + + + Reports a progress update. + The value of the updated progress. + + + Identities the async state machine type for this method. + + + Identities the state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + Gets the type that implements the state machine. + + + Initializes the attribute. + The type that implements the state machine. + + + + Allows you to obtain the method or property name of the caller to the method. + + + + + Allows you to obtain the line number in the source file at which the method is called. + + + + + Allows you to obtain the full path of the source file that contains the caller. + This is the file path at the time of compile. + + + + Identities the iterator state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Threading.Tasks.dll b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Threading.Tasks.dll new file mode 100644 index 0000000..74f5e2c Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Threading.Tasks.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Threading.Tasks.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Threading.Tasks.xml new file mode 100644 index 0000000..6c77012 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl4/System.Threading.Tasks.xml @@ -0,0 +1,8969 @@ + + + + System.Threading.Tasks + + + + Represents one or more errors that occur during application execution. + + is used to consolidate multiple failures into a single, throwable + exception object. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with + a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error + message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + The argument + is null. + + + + Initializes a new instance of the class with + references to the inner exceptions that are the cause of this exception. + + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with + references to the inner exceptions that are the cause of this exception. + + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with a specified error + message and references to the inner exceptions that are the cause of this exception. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Initializes a new instance of the class with a specified error + message and references to the inner exceptions that are the cause of this exception. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Allocates a new aggregate exception with the specified message and list of inner exceptions. + + The error message that explains the reason for the exception. + The exceptions that are the cause of the current exception. + The argument + is null. + An element of is + null. + + + + Returns the that is the root cause of this exception. + + + + + Invokes a handler on each contained by this . + + The predicate to execute for each exception. The predicate accepts as an + argument the to be processed and returns a Boolean to indicate + whether the exception was handled. + + Each invocation of the returns true or false to indicate whether the + was handled. After all invocations, if any exceptions went + unhandled, all unhandled exceptions will be put into a new + which will be thrown. Otherwise, the method simply returns. If any + invocations of the throws an exception, it will halt the processing + of any more exceptions and immediately propagate the thrown exception as-is. + + An exception contained by this was not handled. + The argument is + null. + + + + Flattens an instances into a single, new instance. + + A new, flattened . + + If any inner exceptions are themselves instances of + , this method will recursively flatten all of them. The + inner exceptions returned in the new + will be the union of all of the the inner exceptions from exception tree rooted at the provided + instance. + + + + + Creates and returns a string representation of the current . + + A string representation of the current exception. + + + + Gets a read-only collection of the instances that caused the + current exception. + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to One or more errors occurred.. + + + + + Looks up a localized string similar to An element of innerExceptions was null.. + + + + + Looks up a localized string similar to {0}{1}---> (Inner Exception #{2}) {3}{4}{5}. + + + + + Looks up a localized string similar to No tokens were supplied.. + + + + + Looks up a localized string similar to The CancellationTokenSource associated with this CancellationToken has been disposed.. + + + + + Looks up a localized string similar to The CancellationTokenSource has been disposed.. + + + + + Looks up a localized string similar to The SyncRoot property may not be used for the synchronization of concurrent collections.. + + + + + Looks up a localized string similar to The array is multidimensional, or the type parameter for the set cannot be cast automatically to the type of the destination array.. + + + + + Looks up a localized string similar to The index is equal to or greater than the length of the array, or the number of elements in the dictionary is greater than the available space from index to the end of the destination array.. + + + + + Looks up a localized string similar to The capacity argument must be greater than or equal to zero.. + + + + + Looks up a localized string similar to The concurrencyLevel argument must be positive.. + + + + + Looks up a localized string similar to The index argument is less than zero.. + + + + + Looks up a localized string similar to TKey is a reference type and item.Key is null.. + + + + + Looks up a localized string similar to The key already existed in the dictionary.. + + + + + Looks up a localized string similar to The source argument contains duplicate keys.. + + + + + Looks up a localized string similar to The key was of an incorrect type for this dictionary.. + + + + + Looks up a localized string similar to The value was of an incorrect type for this dictionary.. + + + + + Looks up a localized string similar to The lazily-initialized type does not have a public, parameterless constructor.. + + + + + Looks up a localized string similar to ValueFactory returned null.. + + + + + Looks up a localized string similar to The spinCount argument must be in the range 0 to {0}, inclusive.. + + + + + Looks up a localized string similar to There are too many threads currently waiting on the event. A maximum of {0} waiting threads are supported.. + + + + + Looks up a localized string similar to The event has been disposed.. + + + + + Looks up a localized string similar to The operation was canceled.. + + + + + Looks up a localized string similar to The condition argument is null.. + + + + + Looks up a localized string similar to The timeout must represent a value between -1 and Int32.MaxValue, inclusive.. + + + + + Looks up a localized string similar to The specified TaskContinuationOptions combined LongRunning and ExecuteSynchronously. Synchronous continuations should not be long running.. + + + + + Looks up a localized string similar to The specified TaskContinuationOptions excluded all continuation kinds.. + + + + + Looks up a localized string similar to (Internal)An attempt was made to create a LongRunning SelfReplicating task.. + + + + + Looks up a localized string similar to The value needs to translate in milliseconds to -1 (signifying an infinite timeout), 0 or a positive integer less than or equal to Int32.MaxValue.. + + + + + Looks up a localized string similar to The value needs to be either -1 (signifying an infinite timeout), 0 or a positive integer.. + + + + + Looks up a localized string similar to A task may only be disposed if it is in a completion state (RanToCompletion, Faulted or Canceled).. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.LongRunning in calls to FromAsync.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.PreferFairness in calls to FromAsync.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.SelfReplicating in calls to FromAsync.. + + + + + Looks up a localized string similar to FromAsync was called with a TaskManager that had already shut down.. + + + + + Looks up a localized string similar to The tasks argument contains no tasks.. + + + + + Looks up a localized string similar to It is invalid to exclude specific continuation kinds for continuations off of multiple tasks.. + + + + + Looks up a localized string similar to The tasks argument included a null value.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task that was already started.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a continuation task.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task not bound to a delegate, such as the task returned from an asynchronous method.. + + + + + Looks up a localized string similar to RunSynchronously may not be called on a task that has already completed.. + + + + + Looks up a localized string similar to Start may not be called on a task that was already started.. + + + + + Looks up a localized string similar to Start may not be called on a continuation task.. + + + + + Looks up a localized string similar to Start may not be called on a task with null action.. + + + + + Looks up a localized string similar to Start may not be called on a promise-style task.. + + + + + Looks up a localized string similar to Start may not be called on a task that has completed.. + + + + + Looks up a localized string similar to The task has been disposed.. + + + + + Looks up a localized string similar to The tasks array included at least one null element.. + + + + + Looks up a localized string similar to The awaited task has not yet completed.. + + + + + Looks up a localized string similar to A task was canceled.. + + + + + Looks up a localized string similar to The exceptions collection was empty.. + + + + + Looks up a localized string similar to The exceptions collection included at least one null element.. + + + + + Looks up a localized string similar to A Task's exception(s) were not observed either by Waiting on the Task or accessing its Exception property. As a result, the unobserved exception was rethrown by the finalizer thread.. + + + + + Looks up a localized string similar to (Internal)Expected an Exception or an IEnumerable<Exception>. + + + + + Looks up a localized string similar to ExecuteTask may not be called for a task which was already executed.. + + + + + Looks up a localized string similar to ExecuteTask may not be called for a task which was previously queued to a different TaskScheduler.. + + + + + Looks up a localized string similar to The current SynchronizationContext may not be used as a TaskScheduler.. + + + + + Looks up a localized string similar to The TryExecuteTaskInline call to the underlying scheduler succeeded, but the task body was not invoked.. + + + + + Looks up a localized string similar to An exception was thrown by a TaskScheduler.. + + + + + Looks up a localized string similar to It is invalid to specify TaskCreationOptions.SelfReplicating for a Task<TResult>.. + + + + + Looks up a localized string similar to {Not yet computed}. + + + + + Looks up a localized string similar to A task's Exception may only be set directly if the task was created without a function.. + + + + + Looks up a localized string similar to An attempt was made to transition a task to a final state when it had already completed.. + + + + + Represents a thread-safe collection of keys and values. + + The type of the keys in the dictionary. + The type of the values in the dictionary. + + All public and protected members of are thread-safe and may be used + concurrently from multiple threads. + + + + + Initializes a new instance of the + class that is empty, has the default concurrency level, has the default initial capacity, and + uses the default comparer for the key type. + + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level and capacity, and uses the default + comparer for the key type. + + The estimated number of threads that will update the + concurrently. + The initial number of elements that the + can contain. + is + less than 1. + is less than + 0. + + + + Initializes a new instance of the + class that contains elements copied from the specified , has the default concurrency + level, has the default initial capacity, and uses the default comparer for the key type. + + The whose elements are copied to + the new + . + is a null reference + (Nothing in Visual Basic). + contains one or more + duplicate keys. + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level and capacity, and uses the specified + . + + The + implementation to use when comparing keys. + is a null reference + (Nothing in Visual Basic). + + + + Initializes a new instance of the + class that contains elements copied from the specified , has the default concurrency level, has the default + initial capacity, and uses the specified + . + + The whose elements are copied to + the new + . + The + implementation to use when comparing keys. + is a null reference + (Nothing in Visual Basic). -or- + is a null reference (Nothing in Visual Basic). + + + + + Initializes a new instance of the + class that contains elements copied from the specified , + has the specified concurrency level, has the specified initial capacity, and uses the specified + . + + The estimated number of threads that will update the + concurrently. + The whose elements are copied to the new + . + The implementation to use + when comparing keys. + + is a null reference (Nothing in Visual Basic). + -or- + is a null reference (Nothing in Visual Basic). + + + is less than 1. + + contains one or more duplicate keys. + + + + Initializes a new instance of the + class that is empty, has the specified concurrency level, has the specified initial capacity, and + uses the specified . + + The estimated number of threads that will update the + concurrently. + The initial number of elements that the + can contain. + The + implementation to use when comparing keys. + + is less than 1. -or- + is less than 0. + + is a null reference + (Nothing in Visual Basic). + + + + Attempts to add the specified key and value to the . + + The key of the element to add. + The value of the element to add. The value can be a null reference (Nothing + in Visual Basic) for reference types. + true if the key/value pair was added to the + successfully; otherwise, false. + is null reference + (Nothing in Visual Basic). + The + contains too many elements. + + + + Determines whether the contains the specified + key. + + The key to locate in the . + true if the contains an element with + the specified key; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Attempts to remove and return the the value with the specified key from the + . + + The key of the element to remove and return. + When this method returns, contains the object removed from the + or the default value of + if the operation failed. + true if an object was removed successfully; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Removes the specified key from the dictionary if it exists and returns its associated value. + If matchValue flag is set, the key will be removed only if is associated with a particular + value. + + The key to search for and remove if it exists. + The variable into which the removed value, if found, is stored. + Whether removal of the key is conditional on its value. + The conditional value to compare against if is true + + + + + Attempts to get the value associated with the specified key from the . + + The key of the value to get. + When this method returns, contains the object from + the + with the spedified key or the default value of + , if the operation failed. + true if the key was found in the ; + otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + + Compares the existing value for the specified key with a specified value, and if they’re equal, + updates the key with a third value. + + The key whose value is compared with and + possibly replaced. + The value that replaces the value of the element with if the comparison results in equality. + The value that is compared to the value of the element with + . + true if the value with was equal to and replaced with ; otherwise, + false. + is a null + reference. + + + + Removes all keys and values from the . + + + + + Copies the elements of the to an array of + type , starting at the + specified array index. + + The one-dimensional array of type + that is the destination of the elements copied from the . The array must have zero-based indexing. + The zero-based index in at which copying + begins. + is a null reference + (Nothing in Visual Basic). + is less than + 0. + is equal to or greater than + the length of the . -or- The number of elements in the source + is greater than the available space from to the end of the destination + . + + + + Copies the key and value pairs stored in the to a + new array. + + A new array containing a snapshot of key and value pairs copied from the . + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToPairs. + + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToEntries. + + + + + Copy dictionary contents to an array - shared implementation between ToArray and CopyTo. + + Important: the caller must hold all locks in m_locks before calling CopyToObjects. + + + + Returns an enumerator that iterates through the . + An enumerator for the . + + The enumerator returned from the dictionary is safe to use concurrently with + reads and writes to the dictionary, however it does not represent a moment-in-time snapshot + of the dictionary. The contents exposed through the enumerator may contain modifications + made to the dictionary after was called. + + + + + Shared internal implementation for inserts and updates. + If key exists, we always return false; and if updateIfExists == true we force update with value; + If key doesn't exist, we always add value and return true; + + + + + Adds a key/value pair to the + if the key does not already exist. + + The key of the element to add. + The function used to generate a value for the key + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The value for the key. This will be either the existing value for the key if the + key is already in the dictionary, or the new value for the key as returned by valueFactory + if the key was not in the dictionary. + + + + Adds a key/value pair to the + if the key does not already exist. + + The key of the element to add. + the value to be added, if the key does not already exist + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The value for the key. This will be either the existing value for the key if the + key is already in the dictionary, or the new value if the key was not in the dictionary. + + + + Adds a key/value pair to the if the key does not already + exist, or updates a key/value pair in the if the key + already exists. + + The key to be added or whose value should be updated + The function used to generate a value for an absent key + The function used to generate a new value for an existing key + based on the key's existing value + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The new value for the key. This will be either be the result of addValueFactory (if the key was + absent) or the result of updateValueFactory (if the key was present). + + + + Adds a key/value pair to the if the key does not already + exist, or updates a key/value pair in the if the key + already exists. + + The key to be added or whose value should be updated + The value to be added for an absent key + The function used to generate a new value for an existing key based on + the key's existing value + is a null reference + (Nothing in Visual Basic). + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + The new value for the key. This will be either be the result of addValueFactory (if the key was + absent) or the result of updateValueFactory (if the key was present). + + + + Adds the specified key and value to the . + + The object to use as the key of the element to add. + The object to use as the value of the element to add. + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + + An element with the same key already exists in the . + + + + Removes the element with the specified key from the . + + The key of the element to remove. + true if the element is successfully remove; otherwise false. This method also returns + false if + was not found in the original . + + is a null reference + (Nothing in Visual Basic). + + + + Adds the specified value to the + with the specified key. + + The + structure representing the key and value to add to the . + The of is null. + The + contains too many elements. + An element with the same key already exists in the + + + + + Determines whether the + contains a specific key and value. + + The + structure to locate in the . + true if the is found in the ; otherwise, false. + + + + Removes a key and value from the dictionary. + + The + structure representing the key and value to remove from the . + true if the key and value represented by is successfully + found and removed; otherwise, false. + The Key property of is a null reference (Nothing in Visual Basic). + + + Returns an enumerator that iterates through the . + An enumerator for the . + + The enumerator returned from the dictionary is safe to use concurrently with + reads and writes to the dictionary, however it does not represent a moment-in-time snapshot + of the dictionary. The contents exposed through the enumerator may contain modifications + made to the dictionary after was called. + + + + + Adds the specified key and value to the dictionary. + + The object to use as the key. + The object to use as the value. + is a null reference + (Nothing in Visual Basic). + The dictionary contains too many + elements. + + is of a type that is not assignable to the key type of the . -or- + is of a type that is not assignable to , + the type of values in the . + -or- A value with the same key already exists in the . + + + + + Gets whether the contains an + element with the specified key. + + The key to locate in the . + true if the contains + an element with the specified key; otherwise, false. + is a null reference + (Nothing in Visual Basic). + + + Provides an for the + . + An for the . + + + + Removes the element with the specified key from the . + + The key of the element to remove. + is a null reference + (Nothing in Visual Basic). + + + + Copies the elements of the to an array, starting + at the specified array index. + + The one-dimensional array that is the destination of the elements copied from + the . The array must have zero-based + indexing. + The zero-based index in at which copying + begins. + is a null reference + (Nothing in Visual Basic). + is less than + 0. + is equal to or greater than + the length of the . -or- The number of elements in the source + is greater than the available space from to the end of the destination + . + + + + Replaces the internal table with a larger one. To prevent multiple threads from resizing the + table as a result of races, the table of buckets that was deemed too small is passed in as + an argument to GrowTable(). GrowTable() obtains a lock, and then checks whether the bucket + table has been replaced in the meantime or not. + + Reference to the bucket table that was deemed too small. + + + + Computes the bucket and lock number for a particular key. + + + + + Acquires all locks for this hash table, and increments locksAcquired by the number + of locks that were successfully acquired. The locks are acquired in an increasing + order. + + + + + Acquires a contiguous range of locks for this hash table, and increments locksAcquired + by the number of locks that were successfully acquired. The locks are acquired in an + increasing order. + + + + + Releases a contiguous range of locks. + + + + + Gets a collection containing the keys in the dictionary. + + + + + Gets a collection containing the values in the dictionary. + + + + + A helper method for asserts. + + + + + Get the data array to be serialized + + + + + Construct the dictionary from a previously seiralized one + + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key. If the specified key is not found, a get + operation throws a + , and a set operation creates a new + element with the specified key. + is a null reference + (Nothing in Visual Basic). + The property is retrieved and + + does not exist in the collection. + + + + Gets the number of key/value pairs contained in the . + + The dictionary contains too many + elements. + The number of key/value paris contained in the . + Count has snapshot semantics and represents the number of items in the + at the moment when Count was accessed. + + + + Gets a value that indicates whether the is empty. + + true if the is empty; otherwise, + false. + + + + Gets a collection containing the keys in the . + + An containing the keys in the + . + + + + Gets a collection containing the values in the . + + An containing the values in + the + . + + + + Gets a value indicating whether the dictionary is read-only. + + true if the is + read-only; otherwise, false. For , this property always returns + false. + + + + Gets a value indicating whether the has a fixed size. + + true if the has a + fixed size; otherwise, false. For , this property always + returns false. + + + + Gets a value indicating whether the is read-only. + + true if the is + read-only; otherwise, false. For , this property always + returns false. + + + + Gets an containing the keys of the . + + An containing the keys of the . + + + + Gets an containing the values in the . + + An containing the values in the . + + + + Gets or sets the value associated with the specified key. + + The key of the value to get or set. + The value associated with the specified key, or a null reference (Nothing in Visual Basic) + if is not in the dictionary or is of a type that is + not assignable to the key type of the . + is a null reference + (Nothing in Visual Basic). + + A value is being assigned, and is of a type that is not assignable to the + key type of the . -or- A value is being + assigned, and is of a type that is not assignable to the value type + of the + + + + + Gets a value indicating whether access to the is + synchronized with the SyncRoot. + + true if access to the is synchronized + (thread safe); otherwise, false. For , this property always + returns false. + + + + Gets an object that can be used to synchronize access to the . This property is not supported. + + The SyncRoot property is not supported. + + + + The number of concurrent writes for which to optimize by default. + + + + + A node in a singly-linked list representing a particular hash table bucket. + + + + + A private class to represent enumeration over the dictionary that implements the + IDictionaryEnumerator interface. + + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + Represents an asynchronous method builder. + + + A cached VoidTaskResult task used for builders that complete synchronously. + + + The generic builder object to which this non-generic instance delegates. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state. + + The builder is not initialized. + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + + Gets the for this builder. + The representing the builder's asynchronous operation. + The builder is not initialized. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + Holds state related to the builder's IAsyncStateMachine. + This is a mutable struct. Be very delicate with it. + + + A reference to the heap-allocated state machine object associated with this builder. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument is null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + + Gets the Action to use with an awaiter's OnCompleted or UnsafeOnCompleted method. + On first invocation, the supplied state machine will be boxed. + + Specifies the type of the method builder used. + Specifies the type of the state machine used. + The builder. + The state machine. + An Action to provide to the awaiter. + + + Provides the ability to invoke a state machine's MoveNext method under a supplied ExecutionContext. + + + The context with which to run MoveNext. + + + The state machine whose MoveNext method should be invoked. + + + Initializes the runner. + The context with which to run MoveNext. + + + Invokes MoveNext under the provided context. + + + Cached delegate used with ExecutionContext.Run. + + + Invokes the MoveNext method on the supplied IAsyncStateMachine. + The IAsyncStateMachine machine instance. + + + + Provides a builder for asynchronous methods that return void. + This type is intended for compiler use only. + + + + The synchronization context associated with this operation. + + + State related to the IAsyncStateMachine. + + + An object used by the debugger to uniquely identify this builder. Lazily initialized. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Registers with UnobservedTaskException to suppress exception crashing. + + + Non-zero if PreventUnobservedTaskExceptions has already been invoked. + + + Initializes a new . + The initialized . + + + Initializes the . + The synchronizationContext associated with this operation. This may be null. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument was null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + Completes the method builder successfully. + + + Faults the method builder with an exception. + The exception that is the cause of this fault. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + + + Notifies the current synchronization context that the operation completed. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger and only in a single-threaded manner. + + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder{TResult} is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + A cached task for default(TResult). + + + State related to the IAsyncStateMachine. + + + The lazily-initialized task. + Must be named m_task for debugger step-over to work correctly. + + + The lazily-initialized task completion source. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state with the specified result. + + The result to use to complete the task. + The task has already completed. + + + + Completes the builder by using either the supplied completed task, or by completing + the builder's previously accessed task using default(TResult). + + A task already completed with the value default(TResult). + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + This should only be invoked from within an asynchronous method, + and only by the debugger. + + + + + Gets a task for the specified result. This will either + be a cached or new task, never null. + + The result for which we need a task. + The completed task containing the result. + + + Gets the lazily-initialized TaskCompletionSource. + + + Gets the for this builder. + The representing the builder's asynchronous operation. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + Provides a base class used to cache tasks of a specific return type. + Specifies the type of results the cached tasks return. + + + + A singleton cache for this result type. + This may be null if there are no cached tasks for this TResult. + + + + Creates a non-disposable task. + The result for the task. + The cacheable task. + + + Creates a cache. + A task cache for this result type. + + + Gets a cached task if one exists. + The result for which we want a cached task. + A cached task if one exists; otherwise, null. + + + Provides a cache for Boolean tasks. + + + A true task. + + + A false task. + + + Gets a cached task for the Boolean result. + true or false + A cached task for the Boolean result. + + + Provides a cache for zero Int32 tasks. + + + The minimum value, inclusive, for which we want a cached task. + + + The maximum value, exclusive, for which we want a cached task. + + + The cache of Task{Int32}. + + + Creates an array of cached tasks for the values in the range [INCLUSIVE_MIN,EXCLUSIVE_MAX). + + + Gets a cached task for the zero Int32 result. + The integer value + A cached task for the Int32 result or null if not cached. + + + + Represents state machines generated for asynchronous methods. + This type is intended for compiler use only. + + + + Moves the state machine to its next state. + + + Configures the state machine with a heap-allocated replica. + The heap-allocated replica. + + + + Represents an awaiter used to schedule continuations when an await operation completes. + + + + + Represents an operation that will schedule continuations when the operation completes. + + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + Unlike OnCompleted, UnsafeOnCompleted need not propagate ExecutionContext information. + + + Used with Task(of void) + + + + An interface similar to the one added in .NET 4.0. + + + + The exception that is thrown in a thread upon cancellation of an operation that the thread was executing. + + + Initializes the exception. + + + Initializes the exception. + The error message that explains the reason for the exception. + + + Initializes the exception. + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + Initializes the exception. + A cancellation token associated with the operation that was canceled. + + + Initializes the exception. + The error message that explains the reason for the exception. + A cancellation token associated with the operation that was canceled. + + + Initializes the exception. + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + A cancellation token associated with the operation that was canceled. + + + Gets a token associated with the operation that was canceled. + + + + A dummy replacement for the .NET internal class StackCrawlMark. + + + + + Propogates notification that operations should be canceled. + + + + A may be created directly in an unchangeable canceled or non-canceled state + using the CancellationToken's constructors. However, to have a CancellationToken that can change + from a non-canceled to a canceled state, + CancellationTokenSource must be used. + CancellationTokenSource exposes the associated CancellationToken that may be canceled by the source through its + Token property. + + + Once canceled, a token may not transition to a non-canceled state, and a token whose + is false will never change to one that can be canceled. + + + All members of this struct are thread-safe and may be used concurrently from multiple threads. + + + + + + Internal constructor only a CancellationTokenSource should create a CancellationToken + + + + + Initializes the CancellationToken. + + + The canceled state for the token. + + + Tokens created with this constructor will remain in the canceled state specified + by the parameter. If is false, + both and will be false. + If is true, + both and will be true. + + + + + Registers a delegate that will be called when this CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + A Boolean value that indicates whether to capture + the current SynchronizationContext and use it + when invoking the . + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The state to pass to the when the delegate is invoked. This may be null. + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Registers a delegate that will be called when this + CancellationToken is canceled. + + + + If this token is already in the canceled state, the + delegate will be run immediately and synchronously. Any exception the delegate generates will be + propogated out of this method call. + + + The delegate to be executed when the CancellationToken is canceled. + The state to pass to the when the delegate is invoked. This may be null. + A Boolean value that indicates whether to capture + the current SynchronizationContext and use it + when invoking the . + The instance that can + be used to deregister the callback. + is null. + The associated CancellationTokenSource has been disposed. + + + + Determines whether the current CancellationToken instance is equal to the + specified token. + + The other CancellationToken to which to compare this + instance. + True if the instances are equal; otherwise, false. Two tokens are equal if they are associated + with the same CancellationTokenSource or if they were both constructed + from public CancellationToken constructors and their values are equal. + + + + Determines whether the current CancellationToken instance is equal to the + specified . + + The other object to which to compare this instance. + True if is a CancellationToken + and if the two instances are equal; otherwise, false. Two tokens are equal if they are associated + with the same CancellationTokenSource or if they were both constructed + from public CancellationToken constructors and their values are equal. + An associated CancellationTokenSource has been disposed. + + + + Serves as a hash function for a CancellationToken. + + A hash code for the current CancellationToken instance. + + + + Determines whether two CancellationToken instances are equal. + + The first instance. + The second instance. + True if the instances are equal; otherwise, false. + An associated CancellationTokenSource has been disposed. + + + + Determines whether two CancellationToken instances are not equal. + + The first instance. + The second instance. + True if the instances are not equal; otherwise, false. + An associated CancellationTokenSource has been disposed. + + + + Throws a OperationCanceledException if + this token has had cancellation requested. + + + This method provides functionality equivalent to: + + if (token.IsCancellationRequested) + throw new OperationCanceledException(token); + + + The token has had cancellation requested. + The associated CancellationTokenSource has been disposed. + + + + Returns an empty CancellationToken value. + + + The value returned by this property will be non-cancelable by default. + + + + + Gets whether cancellation has been requested for this token. + + Whether cancellation has been requested for this token. + + + This property indicates whether cancellation has been requested for this token, + either through the token initially being construted in a canceled state, or through + calling Cancel + on the token's associated . + + + If this property is true, it only guarantees that cancellation has been requested. + It does not guarantee that every registered handler + has finished executing, nor that cancellation requests have finished propagating + to all registered handlers. Additional synchronization may be required, + particularly in situations where related objects are being canceled concurrently. + + + + + + Gets whether this token is capable of being in the canceled state. + + + If CanBeCanceled returns false, it is guaranteed that the token will never transition + into a canceled state, meaning that will never + return true. + + + + + Gets a that is signaled when the token is canceled. + + Accessing this property causes a WaitHandle + to be instantiated. It is preferable to only use this property when necessary, and to then + dispose the associated instance at the earliest opportunity (disposing + the source will dispose of this allocated handle). The handle should not be closed or disposed directly. + + The associated CancellationTokenSource has been disposed. + + + + Represents a callback delegate that has been registered with a CancellationToken. + + + To unregister a callback, dispose the corresponding Registration instance. + + + + + Attempts to deregister the item. If it's already being run, this may fail. + Entails a full memory fence. + + True if the callback was found and deregistered, false otherwise. + + + + Disposes of the registration and unregisters the target callback from the associated + CancellationToken. + If the target callback is currently executing this method will wait until it completes, except + in the degenerate cases where a callback method deregisters itself. + + + + + Determines whether two CancellationTokenRegistration + instances are equal. + + The first instance. + The second instance. + True if the instances are equal; otherwise, false. + + + + Determines whether two CancellationTokenRegistration instances are not equal. + + The first instance. + The second instance. + True if the instances are not equal; otherwise, false. + + + + Determines whether the current CancellationTokenRegistration instance is equal to the + specified . + + The other object to which to compare this instance. + True, if both this and are equal. False, otherwise. + Two CancellationTokenRegistration instances are equal if + they both refer to the output of a single call to the same Register method of a + CancellationToken. + + + + + Determines whether the current CancellationToken instance is equal to the + specified . + + The other CancellationTokenRegistration to which to compare this instance. + True, if both this and are equal. False, otherwise. + Two CancellationTokenRegistration instances are equal if + they both refer to the output of a single call to the same Register method of a + CancellationToken. + + + + + Serves as a hash function for a CancellationTokenRegistration.. + + A hash code for the current CancellationTokenRegistration instance. + + + + Signals to a that it should be canceled. + + + + is used to instantiate a + (via the source's Token property) + that can be handed to operations that wish to be notified of cancellation or that can be used to + register asynchronous operations for cancellation. That token may have cancellation requested by + calling to the source's Cancel + method. + + + All members of this class, except Dispose, are thread-safe and may be used + concurrently from multiple threads. + + + + + The ID of the thread currently executing the main body of CTS.Cancel() + this helps us to know if a call to ctr.Dispose() is running 'within' a cancellation callback. + This is updated as we move between the main thread calling cts.Cancel() and any syncContexts that are used to + actually run the callbacks. + + + + Initializes the . + + + + + Communicates a request for cancellation. + + + + The associated will be + notified of the cancellation and will transition to a state where + IsCancellationRequested returns true. + Any callbacks or cancelable operations + registered with the will be executed. + + + Cancelable operations and callbacks registered with the token should not throw exceptions. + However, this overload of Cancel will aggregate any exceptions thrown into a , + such that one callback throwing an exception will not prevent other registered callbacks from being executed. + + + The that was captured when each callback was registered + will be reestablished when the callback is invoked. + + + An aggregate exception containing all the exceptions thrown + by the registered callbacks on the associated . + This has been disposed. + + + + Communicates a request for cancellation. + + + + The associated will be + notified of the cancellation and will transition to a state where + IsCancellationRequested returns true. + Any callbacks or cancelable operations + registered with the will be executed. + + + Cancelable operations and callbacks registered with the token should not throw exceptions. + If is true, an exception will immediately propagate out of the + call to Cancel, preventing the remaining callbacks and cancelable operations from being processed. + If is false, this overload will aggregate any + exceptions thrown into a , + such that one callback throwing an exception will not prevent other registered callbacks from being executed. + + + The that was captured when each callback was registered + will be reestablished when the callback is invoked. + + + Specifies whether exceptions should immediately propagate. + An aggregate exception containing all the exceptions thrown + by the registered callbacks on the associated . + This has been disposed. + + + + Releases the resources used by this . + + + This method is not thread-safe for any other concurrent calls. + + + + + Throws an exception if the source has been disposed. + + + + + InternalGetStaticSource() + + Whether the source should be set. + A static source to be shared among multiple tokens. + + + + Registers a callback object. If cancellation has already occurred, the + callback will have been run by the time this method returns. + + + + + + + + + + Invoke the Canceled event. + + + The handlers are invoked synchronously in LIFO order. + + + + + Creates a CancellationTokenSource that will be in the canceled state + when any of the source tokens are in the canceled state. + + The first CancellationToken to observe. + The second CancellationToken to observe. + A CancellationTokenSource that is linked + to the source tokens. + A CancellationTokenSource associated with + one of the source tokens has been disposed. + + + + Creates a CancellationTokenSource that will be in the canceled state + when any of the source tokens are in the canceled state. + + The CancellationToken instances to observe. + A CancellationTokenSource that is linked + to the source tokens. + is null. + A CancellationTokenSource associated with + one of the source tokens has been disposed. + + + + Gets whether cancellation has been requested for this CancellationTokenSource. + + Whether cancellation has been requested for this CancellationTokenSource. + + + This property indicates whether cancellation has been requested for this token source, such as + due to a call to its + Cancel method. + + + If this property returns true, it only guarantees that cancellation has been requested. It does not + guarantee that every handler registered with the corresponding token has finished executing, nor + that cancellation requests have finished propagating to all registered handlers. Additional + synchronization may be required, particularly in situations where related objects are being + canceled concurrently. + + + + + + A simple helper to determine whether cancellation has finished. + + + + + A simple helper to determine whether disposal has occured. + + + + + The ID of the thread that is running callbacks. + + + + + Gets the CancellationToken + associated with this . + + The CancellationToken + associated with this . + The token source has been + disposed. + + + + + + + + + + + + + + The currently executing callback + + + + + A helper class for collating the various bits of information required to execute + cancellation callbacks. + + + + + InternalExecuteCallbackSynchronously_GeneralPath + This will be called on the target synchronization context, however, we still need to restore the required execution context + + + + + A sparsely populated array. Elements can be sparse and some null, but this allows for + lock-free additions and growth, and also for constant time removal (by nulling out). + + The kind of elements contained within. + + + + Allocates a new array with the given initial size. + + How many array slots to pre-allocate. + + + + Adds an element in the first available slot, beginning the search from the tail-to-head. + If no slots are available, the array is grown. The method doesn't return until successful. + + The element to add. + Information about where the add happened, to enable O(1) deregistration. + + + + The tail of the doubly linked list. + + + + + A struct to hold a link to the exact spot in an array an element was inserted, enabling + constant time removal later on. + + + + + A fragment of a sparsely populated array, doubly linked. + + The kind of elements contained within. + + + + Provides lazy initialization routines. + + + These routines avoid needing to allocate a dedicated, lazy-initialization instance, instead using + references to ensure targets have been initialized as they are accessed. + + + + + Initializes a target reference type with the type's default constructor if the target has not + already been initialized. + + The refence type of the reference to be initialized. + A reference of type to initialize if it has not + already been initialized. + The initialized reference of type . + Type does not have a default + constructor. + + Permissions to access the constructor of type were missing. + + + + This method may only be used on reference types. To ensure initialization of value + types, see other overloads of EnsureInitialized. + + + This method may be used concurrently by multiple threads to initialize . + In the event that multiple threads access this method concurrently, multiple instances of + may be created, but only one will be stored into . In such an occurrence, this method will not dispose of the + objects that were not stored. If such objects must be disposed, it is up to the caller to determine + if an object was not used and to then dispose of the object appropriately. + + + + + + Initializes a target reference type using the specified function if it has not already been + initialized. + + The reference type of the reference to be initialized. + The reference of type to initialize if it has not + already been initialized. + The invoked to initialize the + reference. + The initialized reference of type . + Type does not have a + default constructor. + returned + null. + + + This method may only be used on reference types, and may + not return a null reference (Nothing in Visual Basic). To ensure initialization of value types or + to allow null reference types, see other overloads of EnsureInitialized. + + + This method may be used concurrently by multiple threads to initialize . + In the event that multiple threads access this method concurrently, multiple instances of + may be created, but only one will be stored into . In such an occurrence, this method will not dispose of the + objects that were not stored. If such objects must be disposed, it is up to the caller to determine + if an object was not used and to then dispose of the object appropriately. + + + + + + Initialize the target using the given delegate (slow path). + + The reference type of the reference to be initialized. + The variable that need to be initialized + The delegate that will be executed to initialize the target + The initialized variable + + + + Initializes a target reference or value type with its default constructor if it has not already + been initialized. + + The type of the reference to be initialized. + A reference or value of type to initialize if it + has not already been initialized. + A reference to a boolean that determines whether the target has already + been initialized. + A reference to an object used as the mutually exclusive lock for initializing + . + The initialized value of type . + + + + Initializes a target reference or value type with a specified function if it has not already been + initialized. + + The type of the reference to be initialized. + A reference or value of type to initialize if it + has not already been initialized. + A reference to a boolean that determines whether the target has already + been initialized. + A reference to an object used as the mutually exclusive lock for initializing + . + The invoked to initialize the + reference or value. + The initialized value of type . + + + + Ensure the target is initialized and return the value (slow path). This overload permits nulls + and also works for value type targets. Uses the supplied function to create the value. + + The type of target. + A reference to the target to be initialized. + A reference to a location tracking whether the target has been initialized. + A reference to a location containing a mutual exclusive lock. + + The to invoke in order to produce the lazily-initialized value. + + The initialized object. + + + + Provides a slimmed down version of . + + + All public and protected members of are thread-safe and may be used + concurrently from multiple threads, with the exception of Dispose, which + must only be used when all other operations on the have + completed, and Reset, which should only be used when no other threads are + accessing the event. + + + + + Initializes a new instance of the + class with an initial state of nonsignaled. + + + + + Initializes a new instance of the + class with a Boolen value indicating whether to set the intial state to signaled. + + true to set the initial state signaled; false to set the initial state + to nonsignaled. + + + + Initializes a new instance of the + class with a Boolen value indicating whether to set the intial state to signaled and a specified + spin count. + + true to set the initial state to signaled; false to set the initial state + to nonsignaled. + The number of spin waits that will occur before falling back to a true + wait. + is less than + 0 or greater than the maximum allowed value. + + + + Initializes the internal state of the event. + + Whether the event is set initially or not. + The spin count that decides when the event will block. + + + + Helper to ensure the lock object is created before first use. + + + + + This method lazily initializes the event object. It uses CAS to guarantee that + many threads racing to call this at once don't result in more than one event + being stored and used. The event will be signaled or unsignaled depending on + the state of the thin-event itself, with synchronization taken into account. + + True if a new event was created and stored, false otherwise. + + + + Sets the state of the event to signaled, which allows one or more threads waiting on the event to + proceed. + + + + + Private helper to actually perform the Set. + + Indicates whether we are calling Set() during cancellation. + The object has been canceled. + + + + Sets the state of the event to nonsignaled, which causes threads to block. + + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + Blocks the current thread until the current is set. + + + The maximum number of waiters has been exceeded. + + + The caller of this method blocks indefinitely until the current instance is set. The caller will + return immediately if the event is currently in a set state. + + + + + Blocks the current thread until the current receives a signal, + while observing a . + + The to + observe. + + The maximum number of waiters has been exceeded. + + was + canceled. + + The caller of this method blocks indefinitely until the current instance is set. The caller will + return immediately if the event is currently in a set state. + + + + + Blocks the current thread until the current is set, using a + to measure the time interval. + + A that represents the number of milliseconds + to wait, or a that represents -1 milliseconds to wait indefinitely. + + true if the was set; otherwise, + false. + is a negative + number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater + than . + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + to measure the time interval, while observing a . + + A that represents the number of milliseconds + to wait, or a that represents -1 milliseconds to wait indefinitely. + + The to + observe. + true if the was set; otherwise, + false. + is a negative + number other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater + than . + was canceled. + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + 32-bit signed integer to measure the time interval. + + The number of milliseconds to wait, or (-1) to wait indefinitely. + true if the was set; otherwise, + false. + is a + negative number other than -1, which represents an infinite time-out. + + The maximum number of waiters has been exceeded. + + + + + Blocks the current thread until the current is set, using a + 32-bit signed integer to measure the time interval, while observing a . + + The number of milliseconds to wait, or (-1) to wait indefinitely. + The to + observe. + true if the was set; otherwise, + false. + is a + negative number other than -1, which represents an infinite time-out. + + The maximum number of waiters has been exceeded. + + was canceled. + + + + Releases all resources used by the current instance of . + + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + When overridden in a derived class, releases the unmanaged resources used by the + , and optionally releases the managed resources. + + true to release both managed and unmanaged resources; + false to release only unmanaged resources. + + Unlike most of the members of , is not + thread-safe and may not be used concurrently with other members of this instance. + + + + + Throw ObjectDisposedException if the MRES is disposed + + + + + Private helper method to wake up waiters when a cancellationToken gets canceled. + + + + + Private helper method for updating parts of a bit-string state value. + Mainly called from the IsSet and Waiters properties setters + + + Note: the parameter types must be int as CompareExchange cannot take a Uint + + The new value + The mask used to set the bits + + + + Private helper method - performs Mask and shift, particular helpful to extract a field from a packed word. + eg ExtractStatePortionAndShiftRight(0x12345678, 0xFF000000, 24) => 0x12, ie extracting the top 8-bits as a simple integer + + ?? is there a common place to put this rather than being private to MRES? + + + + + + + + + Performs a Mask operation, but does not perform the shift. + This is acceptable for boolean values for which the shift is unnecessary + eg (val & Mask) != 0 is an appropriate way to extract a boolean rather than using + ((val & Mask) >> shiftAmount) == 1 + + ?? is there a common place to put this rather than being private to MRES? + + + + + + + Helper function to measure and update the wait time + + The first time (in Ticks) observed when the wait started. + The orginal wait timeoutout in milliseconds. + The new wait time in milliseconds, -1 if the time expired, -2 if overflow in counters + has occurred. + + + + Gets the underlying object for this . + + The underlying event object fore this . + + Accessing this property forces initialization of an underlying event object if one hasn't + already been created. To simply wait on this , + the public Wait methods should be preferred. + + + + + Gets whether the event is set. + + true if the event has is set; otherwise, false. + + + + Gets the number of spin waits that will be occur before falling back to a true wait. + + + + + How many threads are waiting. + + + + + Provides support for spin-based waiting. + + + + encapsulates common spinning logic. On single-processor machines, yields are + always used instead of busy waits, and on computers with Intel™ processors employing Hyper-Threading™ + technology, it helps to prevent hardware thread starvation. SpinWait encapsulates a good mixture of + spinning and true yielding. + + + is a value type, which means that low-level code can utilize SpinWait without + fear of unnecessary allocation overheads. SpinWait is not generally useful for ordinary applications. + In most cases, you should use the synchronization classes provided by the .NET Framework, such as + . For most purposes where spin waiting is required, however, + the type should be preferred over the System.Threading.Thread.SpinWait method. + + + While SpinWait is designed to be used in concurrent applications, it is not designed to be + used from multiple threads concurrently. SpinWait's members are not thread-safe. If multiple + threads must spin, each should use its own instance of SpinWait. + + + + + + Performs a single spin. + + + This is typically called in a loop, and may change in behavior based on the number of times a + has been called thus far on this instance. + + + + + Resets the spin counter. + + + This makes and behave as though no calls + to had been issued on this instance. If a instance + is reused many times, it may be useful to reset it to avoid yielding too soon. + + + + + Spins until the specified condition is satisfied. + + A delegate to be executed over and over until it returns true. + The argument is null. + + + + Spins until the specified condition is satisfied or until the specified timeout is expired. + + A delegate to be executed over and over until it returns true. + + A that represents the number of milliseconds to wait, + or a TimeSpan that represents -1 milliseconds to wait indefinitely. + True if the condition is satisfied within the timeout; otherwise, false + The argument is null. + is a negative number + other than -1 milliseconds, which represents an infinite time-out -or- timeout is greater than + . + + + + Spins until the specified condition is satisfied or until the specified timeout is expired. + + A delegate to be executed over and over until it returns true. + The number of milliseconds to wait, or (-1) to wait indefinitely. + True if the condition is satisfied within the timeout; otherwise, false + The argument is null. + is a + negative number other than -1, which represents an infinite time-out. + + + + Gets the number of times has been called on this instance. + + + + + Gets whether the next call to will yield the processor, triggering a + forced context switch. + + Whether the next call to will yield the processor, triggering a + forced context switch. + + On a single-CPU machine, always yields the processor. On machines with + multiple CPUs, may yield after an unspecified number of calls. + + + + + A helper class to get the number of preocessors, it updates the numbers of processors every sampling interval + + + + + Gets the number of available processors + + + + + Gets whether the current machine has only a single processor. + + + + + Represents an asynchronous operation that produces a result at some time in the future. + + + The type of the result produced by this . + + + + instances may be created in a variety of ways. The most common approach is by + using the task's property to retrieve a instance that can be used to create tasks for several + purposes. For example, to create a that runs a function, the factory's StartNew + method may be used: + + // C# + var t = Task<int>.Factory.StartNew(() => GenerateResult()); + - or - + var t = Task.Factory.StartNew(() => GenerateResult()); + + ' Visual Basic + Dim t = Task<int>.Factory.StartNew(Function() GenerateResult()) + - or - + Dim t = Task.Factory.StartNew(Function() GenerateResult()) + + + + The class also provides constructors that initialize the task but that do not + schedule it for execution. For performance reasons, the StartNew method should be the + preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation + and scheduling must be separated, the constructors may be used, and the task's + Start + method may then be used to schedule the task for execution at a later time. + + + All members of , except for + Dispose, are thread-safe + and may be used from multiple threads concurrently. + + + + + + Represents an asynchronous operation. + + + + instances may be created in a variety of ways. The most common approach is by + using the Task type's property to retrieve a instance that can be used to create tasks for several + purposes. For example, to create a that runs an action, the factory's StartNew + method may be used: + + // C# + var t = Task.Factory.StartNew(() => DoAction()); + + ' Visual Basic + Dim t = Task.Factory.StartNew(Function() DoAction()) + + + + The class also provides constructors that initialize the Task but that do not + schedule it for execution. For performance reasons, TaskFactory's StartNew method should be the + preferred mechanism for creating and scheduling computational tasks, but for scenarios where creation + and scheduling must be separated, the constructors may be used, and the task's + method may then be used to schedule the task for execution at a later time. + + + All members of , except for , are thread-safe + and may be used from multiple threads concurrently. + + + For operations that return values, the class + should be used. + + + For developers implementing custom debuggers, several internal and private members of Task may be + useful (these may change from release to release). The Int32 m_taskId field serves as the backing + store for the property, however accessing this field directly from a debugger may be + more efficient than accessing the same value through the property's getter method (the + s_taskIdCounter Int32 counter is used to retrieve the next available ID for a Task). Similarly, the + Int32 m_stateFlags field stores information about the current lifecycle stage of the Task, + information also accessible through the property. The m_action System.Object + field stores a reference to the Task's delegate, and the m_stateObject System.Object field stores the + async state passed to the Task by the developer. Finally, for debuggers that parse stack frames, the + InternalWait method serves a potential marker for when a Task is entering a wait operation. + + + + + + A type initializer that runs with the appropriate permissions. + + + + + Initializes a new with the specified action. + + The delegate that represents the code to execute in the Task. + The argument is null. + + + + Initializes a new with the specified action and CancellationToken. + + The delegate that represents the code to execute in the Task. + The CancellationToken + that will be assigned to the new Task. + The argument is null. + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action and creation options. + + The delegate that represents the code to execute in the task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action and creation options. + + The delegate that represents the code to execute in the task. + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action and state. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + + The argument is null. + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + The that will be assigned to the new task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action, state, snd options. + + The delegate that represents the code to execute in the task. + An object representing data to be used by the action. + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the Task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + An internal constructor used by the factory methods on task and its descendent(s). + This variant does not capture the ExecutionContext; it is up to the caller to do that. + + An action to execute. + Optional state to pass to the action. + Parent of Task. + A CancellationToken for the task. + A task scheduler under which the task will run. + Options to control its execution. + Internal options to control its execution + + + + Common logic used by the following internal ctors: + Task() + Task(object action, object state, Task parent, TaskCreationOptions options, TaskScheduler taskScheduler) + + ASSUMES THAT m_creatingTask IS ALREADY SET. + + + Action for task to execute. + Object to which to pass to action (may be null) + Task scheduler on which to run thread (only used by continuation tasks). + A CancellationToken for the Task. + Options to customize behavior of Task. + Internal options to customize behavior of Task. + + + + Checks if we registered a CT callback during construction, and deregisters it. + This should be called when we know the registration isn't useful anymore. Specifically from Finish() if the task has completed + successfully or with an exception. + + + + + Captures the ExecutionContext so long as flow isn't suppressed. + + A stack crawl mark pointing to the frame of the caller. + + + + Internal function that will be called by a new child task to add itself to + the children list of the parent (this). + + Since a child task can only be created from the thread executing the action delegate + of this task, reentrancy is neither required nor supported. This should not be called from + anywhere other than the task construction/initialization codepaths. + + + + + Starts the , scheduling it for execution to the current TaskScheduler. + + + A task may only be started and run only once. Any attempts to schedule a task a second time + will result in an exception. + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Starts the , scheduling it for execution to the specified TaskScheduler. + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + The TaskScheduler with which to associate + and execute this task. + + + The argument is null. + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Runs the synchronously on the current TaskScheduler. + + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + Tasks executed with will be associated with the current TaskScheduler. + + + If the target scheduler does not support running this Task on the current thread, the Task will + be scheduled for execution on the scheduler, and the current thread will block until the + Task has completed execution. + + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + + + + Runs the synchronously on the scheduler provided. + + + + A task may only be started and run only once. Any attempts to schedule a task a second time will + result in an exception. + + + If the target scheduler does not support running this Task on the current thread, the Task will + be scheduled for execution on the scheduler, and the current thread will block until the + Task has completed execution. + + + + The is not in a valid state to be started. It may have already been started, + executed, or canceled, or it may have been created in a manner that doesn't support direct + scheduling. + + + The instance has been disposed. + + The parameter + is null. + The scheduler on which to attempt to run this task inline. + + + + Throws an exception if the task has been disposed, and hence can no longer be accessed. + + The task has been disposed. + + + + Sets the internal completion event. + + + + + Disposes the , releasing all of its unmanaged resources. + + + Unlike most of the members of , this method is not thread-safe. + Also, may only be called on a that is in one of + the final states: RanToCompletion, + Faulted, or + Canceled. + + + The exception that is thrown if the is not in + one of the final states: RanToCompletion, + Faulted, or + Canceled. + + + + + Disposes the , releasing all of its unmanaged resources. + + + A Boolean value that indicates whether this method is being called due to a call to . + + + Unlike most of the members of , this method is not thread-safe. + + + + + Schedules the task for execution. + + If true, TASK_STATE_STARTED bit is turned on in + an atomic fashion, making sure that TASK_STATE_CANCELED does not get set + underneath us. If false, TASK_STATE_STARTED bit is OR-ed right in. This + allows us to streamline things a bit for StartNew(), where competing cancellations + are not a problem. + + + + Adds an exception to the list of exceptions this task has thrown. + + An object representing either an Exception or a collection of Exceptions. + + + + Returns a list of exceptions by aggregating the holder's contents. Or null if + no exceptions have been thrown. + + Whether to include a TCE if cancelled. + An aggregate exception, or null if no exceptions have been caught. + + + + Throws an aggregate exception if the task contains exceptions. + + + + + Checks whether this is an attached task, and whether we are being called by the parent task. + And sets the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag based on that. + + This is meant to be used internally when throwing an exception, and when WaitAll is gathering + exceptions for tasks it waited on. If this flag gets set, the implicit wait on children + will skip exceptions to prevent duplication. + + This should only be called when this task has completed with an exception + + + + + + Signals completion of this particular task. + + The bUserDelegateExecuted parameter indicates whether this Finish() call comes following the + full execution of the user delegate. + + If bUserDelegateExecuted is false, it mean user delegate wasn't invoked at all (either due to + a cancellation request, or because this task is a promise style Task). In this case, the steps + involving child tasks (i.e. WaitForChildren) will be skipped. + + + + + + FinishStageTwo is to be executed as soon as we known there are no more children to complete. + It can happen i) either on the thread that originally executed this task (if no children were spawned, or they all completed by the time this task's delegate quit) + ii) or on the thread that executed the last child. + + + + + Final stage of the task completion code path. Notifies the parent (if any) that another of its childre are done, and runs continuations. + This function is only separated out from FinishStageTwo because these two operations are also needed to be called from CancellationCleanupLogic() + + + + + This is called by children of this task when they are completed. + + + + + This is to be called just before the task does its final state transition. + It traverses the list of exceptional children, and appends their aggregate exceptions into this one's exception list + + + + + Special purpose Finish() entry point to be used when the task delegate throws a ThreadAbortedException + This makes a note in the state flags so that we avoid any costly synchronous operations in the finish codepath + such as inlined continuations + + + Indicates whether the ThreadAbortException was added to this task's exception holder. + This should always be true except for the case of non-root self replicating task copies. + + Whether the delegate was executed. + + + + Executes the task. This method will only be called once, and handles bookeeping associated with + self-replicating tasks, in addition to performing necessary exception marshaling. + + The task has already been disposed. + + + + IThreadPoolWorkItem override, which is the entry function for this task when the TP scheduler decides to run it. + + + + + + Outermost entry function to execute this task. Handles all aspects of executing a task on the caller thread. + Currently this is called by IThreadPoolWorkItem.ExecuteWorkItem(), and TaskManager.TryExecuteInline. + + + Performs atomic updates to prevent double execution. Should only be set to true + in codepaths servicing user provided TaskSchedulers. The ConcRT or ThreadPool schedulers don't need this. + + + + The actual code which invokes the body of the task. This can be overriden in derived types. + + + + + Alternate InnerInvoke prototype to be called from ExecuteSelfReplicating() so that + the Parallel Debugger can discover the actual task being invoked. + Details: Here, InnerInvoke is actually being called on the rootTask object while we are actually executing the + childTask. And the debugger needs to discover the childTask, so we pass that down as an argument. + The NoOptimization and NoInlining flags ensure that the childTask pointer is retained, and that this + function appears on the callstack. + + + + + + Performs whatever handling is necessary for an unhandled exception. Normally + this just entails adding the exception to the holder object. + + The exception that went unhandled. + + + + Waits for the to complete execution. + + + The was canceled -or- an exception was thrown during + the execution of the . + + + The has been disposed. + + + + + Waits for the to complete execution. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + true if the completed execution within the allotted time; otherwise, false. + + + The was canceled -or- an exception was thrown during the execution of the . + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + The has been disposed. + + + + + Waits for the to complete execution. + + + A to observe while waiting for the task to complete. + + + The was canceled. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + + + Waits for the to complete execution. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + true if the completed execution within the allotted time; otherwise, + false. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + + + Waits for the to complete execution. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for the task to complete. + + + true if the completed execution within the allotted time; otherwise, false. + + + The was canceled -or- an exception was thrown during the execution of the . + + + The + has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + The core wait function, which is only accesible internally. It's meant to be used in places in TPL code where + the current context is known or cached. + + + + + Cancels the . + + Indiactes whether we should only cancel non-invoked tasks. + For the default scheduler this option will only be serviced through TryDequeue. + For custom schedulers we also attempt an atomic state transition. + true if the task was successfully canceled; otherwise, false. + The + has been disposed. + + + + Sets the task's cancellation acknowledged flag. + + + + + Runs all of the continuations, as appropriate. + + + + + Helper function to determine whether the current task is in the state desired by the + continuation kind under evaluation. Three possibilities exist: the task failed with + an unhandled exception (OnFailed), the task was canceled before running (OnAborted), + or the task completed successfully (OnCompletedSuccessfully). Note that the last + one includes completing due to cancellation. + + The continuation options under evaluation. + True if the continuation should be run given the task's current state. + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + The that will be assigned to the new continuation task. + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Converts TaskContinuationOptions to TaskCreationOptions, and also does + some validity checking along the way. + + Incoming TaskContinuationOptions + Outgoing TaskCreationOptions + Outgoing InternalTaskOptions + + + + Registers the continuation and possibly runs it (if the task is already finished). + + The continuation task itself. + TaskScheduler with which to associate continuation task. + Restrictions on when the continuation becomes active. + + + + Waits for all of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + An array of instances on which to wait. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + A to observe while waiting for the tasks to complete. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The was canceled. + + + The has been disposed. + + + + + Waits for all of the provided objects to complete execution. + + + true if all of the instances completed execution within the allotted time; + otherwise, false. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for the tasks to complete. + + + The argument is null. + + + The argument contains a null element. + + + At least one of the instances was canceled -or- an exception was thrown during + the execution of at least one of the instances. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + Waits for a set of handles in a STA-aware way. In other words, it will wait for each + of the events individually if we're on a STA thread, because MsgWaitForMultipleObjectsEx + can't do a true wait-all due to its hidden message queue event. This is not atomic, + of course, but we only wait on one-way (MRE) events anyway so this is OK. + + An array of wait handles to wait on. + The timeout to use during waits. + The cancellationToken that enables a wait to be canceled. + True if all waits succeeded, false if a timeout occurred. + + + + Internal WaitAll implementation which is meant to be used with small number of tasks, + optimized for Parallel.Invoke and other structured primitives. + + + + + This internal function is only meant to be called by WaitAll() + If the completed task is canceled or it has other exceptions, here we will add those + into the passed in exception list (which will be lazily initialized here). + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + The index of the completed task in the array argument. + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + A that represents the number of milliseconds to wait, or a that represents -1 milliseconds to wait indefinitely. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1 milliseconds, which represents an + infinite time-out -or- timeout is greater than + . + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + A to observe while waiting for a task to complete. + + + The index of the completed task in the array argument. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + The was canceled. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + + + Waits for any of the provided objects to complete execution. + + + An array of instances on which to wait. + + + The number of milliseconds to wait, or (-1) to + wait indefinitely. + + + A to observe while waiting for a task to complete. + + + The index of the completed task in the array argument, or -1 if the + timeout occurred. + + + The argument is null. + + + The argument contains a null element. + + + The has been disposed. + + + is a negative number other than -1, which represents an + infinite time-out. + + + The was canceled. + + + + + Gets a unique ID for this Task instance. + + + Task IDs are assigned on-demand and do not necessarily represent the order in the which Task + instances were created. + + + + + Returns the unique ID of the currently executing Task. + + + + + Gets the Task instance currently executing, or + null if none exists. + + + + + Gets the Exception that caused the Task to end prematurely. If the Task completed successfully or has not yet thrown any + exceptions, this will return null. + + + Tasks that throw unhandled exceptions store the resulting exception and propagate it wrapped in a + in calls to Wait + or in accesses to the property. Any exceptions not observed by the time + the Task instance is garbage collected will be propagated on the finalizer thread. + + + The Task + has been disposed. + + + + + Gets the TaskStatus of this Task. + + + + + Gets whether this Task instance has completed + execution due to being canceled. + + + A Task will complete in Canceled state either if its CancellationToken + was marked for cancellation before the task started executing, or if the task acknowledged the cancellation request on + its already signaled CancellationToken by throwing an + OperationCanceledException2 that bears the same + CancellationToken. + + + + + Returns true if this task has a cancellation token and it was signaled. + To be used internally in execute entry codepaths. + + + + + This internal property provides access to the CancellationToken that was set on the task + when it was constructed. + + + + + Gets whether this threw an OperationCanceledException2 while its CancellationToken was signaled. + + + + + Gets whether this Task has completed. + + + will return true when the Task is in one of the three + final states: RanToCompletion, + Faulted, or + Canceled. + + + + + Checks whether this task has been disposed. + + + + + Gets the TaskCreationOptions used + to create this task. + + + + + Gets a that can be used to wait for the task to + complete. + + + Using the wait functionality provided by + should be preferred over using for similar + functionality. + + + The has been disposed. + + + + + Gets the state object supplied when the Task was created, + or null if none was supplied. + + + + + Gets an indication of whether the asynchronous operation completed synchronously. + + true if the asynchronous operation completed synchronously; otherwise, false. + + + + Provides access to the TaskScheduler responsible for executing this Task. + + + + + Provides access to factory methods for creating and instances. + + + The factory returned from is a default instance + of , as would result from using + the default constructor on TaskFactory. + + + + + Provides an event that can be used to wait for completion. + Only called by Wait*(), which means that we really do need to instantiate a completion event. + + + + + Determines whether this is the root task of a self replicating group. + + + + + Determines whether the task is a replica itself. + + + + + The property formerly known as IsFaulted. + + + + + Gets whether the completed due to an unhandled exception. + + + If is true, the Task's will be equal to + TaskStatus.Faulted, and its + property will be non-null. + + + + + Checks whether the TASK_STATE_EXCEPTIONOBSERVEDBYPARENT status flag is set, + This will only be used by the implicit wait to prevent double throws + + + + + + Checks whether the body was ever invoked. Used by task scheduler code to verify custom schedulers actually ran the task. + + + + + A structure to hold continuation information. + + + + + Constructs a new continuation structure. + + The task to be activated. + The continuation options. + The scheduler to use for the continuation. + + + + Invokes the continuation for the target completion task. + + The completed task. + Whether the continuation can be inlined. + + + + Initializes a new with the specified function. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + + The argument is null. + + + + + Initializes a new with the specified function. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + The to be assigned to this task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified function and creation options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified function and creation options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + The that will be assigned to the new task. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified function and state. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the action. + + The argument is null. + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + The to be assigned to the new task. + + The argument is null. + + The provided CancellationToken + has already been disposed. + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + + + + Initializes a new with the specified action, state, and options. + + + The delegate that represents the code to execute in the task. When the function has completed, + the task's property will be set to return the result value of the function. + + An object representing data to be used by the function. + The to be assigned to the new task. + + The TaskCreationOptions used to + customize the task's behavior. + + + The argument is null. + + + The argument specifies an invalid value for . + + The provided CancellationToken + has already been disposed. + + + + + Creates a new future object. + + The parent task for this future. + A function that yields the future value. + The task scheduler which will be used to execute the future. + The CancellationToken for the task. + Options to control the future's behavior. + Internal options to control the future's behavior. + The argument specifies + a SelfReplicating , which is illegal."/>. + + + + Creates a new future object. + + The parent task for this future. + An object containing data to be used by the action; may be null. + A function that yields the future value. + The CancellationToken for the task. + The task scheduler which will be used to execute the future. + Options to control the future's behavior. + Internal options to control the future's behavior. + The argument specifies + a SelfReplicating , which is illegal."/>. + + + + Evaluates the value selector of the Task which is passed in as an object and stores the result. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the continuation criteria specified through the parameter are not met, the continuation task will be canceled + instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + An action to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new continuation task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed. If the criteria specified through the parameter + are not met, the continuation task will be canceled instead of scheduled. + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + A new continuation . + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + The that will be assigned to the new task. + A new continuation . + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + The to associate with the continuation task and to use for its execution. + + A new continuation . + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The argument is null. + + + The argument is null. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be + passed the completed task as an argument. + + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + A new continuation . + + + The returned will not be scheduled for execution until the current + task has completed, whether it completes due to running to completion successfully, faulting due + to an unhandled exception, or exiting out early due to being canceled. + + + The , when executed, should return a . This task's completion state will be transferred to the task returned + from the ContinueWith call. + + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The has been disposed. + + + + + Creates a continuation that executes when the target completes. + + + The type of the result produced by the continuation. + + + A function to run when the completes. When run, the delegate will be passed as + an argument this completed task. + + The that will be assigned to the new task. + + Options for when the continuation is scheduled and how it behaves. This includes criteria, such + as OnlyOnCanceled, as + well as execution options, such as ExecuteSynchronously. + + + The to associate with the continuation task and to use for its + execution. + + A new continuation . + + + The returned will not be scheduled for execution until the current task has + completed, whether it completes due to running to completion successfully, faulting due to an + unhandled exception, or exiting out early due to being canceled. + + + The , when executed, should return a . + This task's completion state will be transferred to the task returned from the + ContinueWith call. + + + + The argument is null. + + + The argument specifies an invalid value for TaskContinuationOptions. + + + The argument is null. + + + The has been disposed. + + The provided CancellationToken + has already been disposed. + + + + + Gets the result value of this . + + + The get accessor for this property ensures that the asynchronous operation is complete before + returning. Once the result of the computation is available, it is stored and will be returned + immediately on later calls to . + + + + + Provides access to factory methods for creating instances. + + + The factory returned from is a default instance + of , as would result from using + the default constructor on the factory type. + + + + + Provides support for creating and scheduling + Task{TResult} objects. + + The type of the results that are available though + the Task{TResult} objects that are associated with + the methods in this class. + + + There are many common patterns for which tasks are relevant. The + class encodes some of these patterns into methods that pick up default settings, which are + configurable through its constructors. + + + A default instance of is available through the + Task{TResult}.Factory property. + + + + + + Initializes a instance with the default configuration. + + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the default configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The + TaskScheduler to use to schedule any tasks created with this TaskFactory{TResult}. A null value + indicates that the current TaskScheduler should be used. + + + With this constructor, the + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to , unless it's null, in which case the property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}. + + + The exception that is thrown when the + argument or the + argument specifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory{TResult}. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory{TResult}. + + + The default + TaskScheduler to use to schedule any Tasks created with this TaskFactory{TResult}. A null value + indicates that TaskScheduler.Current should be used. + + + The exception that is thrown when the + argument or the + argumentspecifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to + , unless it's null, in which case the property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new task. + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The that will be assigned to the new task. + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The function delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Gets the default CancellationToken of this + TaskFactory. + + + This property returns the default that will be assigned to all + tasks created by this factory unless another CancellationToken value is explicitly specified + during the call to the factory methods. + + + + + Gets the TaskScheduler of this + TaskFactory{TResult}. + + + This property returns the default scheduler for this factory. It will be used to schedule all + tasks unless another scheduler is explicitly specified during calls to this factory's methods. + If null, TaskScheduler.Current + will be used. + + + + + Gets the TaskCreationOptions + value of this TaskFactory{TResult}. + + + This property returns the default creation options for this factory. They will be used to create all + tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Gets the TaskContinuationOptions + value of this TaskFactory{TResult}. + + + This property returns the default continuation options for this factory. They will be used to create + all continuation tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Represents the current stage in the lifecycle of a . + + + + + The task has been initialized but has not yet been scheduled. + + + + + The task is waiting to be activated and scheduled internally by the .NET Framework infrastructure. + + + + + The task has been scheduled for execution but has not yet begun executing. + + + + + The task is running but has not yet completed. + + + + + The task has finished executing and is implicitly waiting for + attached child tasks to complete. + + + + + The task completed execution successfully. + + + + + The task acknowledged cancellation by throwing an OperationCanceledException2 with its own CancellationToken + while the token was in signaled state, or the task's CancellationToken was already signaled before the + task started executing. + + + + + The task completed due to an unhandled exception. + + + + + Specifies flags that control optional behavior for the creation and execution of tasks. + + + + + Specifies that the default behavior should be used. + + + + + A hint to a TaskScheduler to schedule a + task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to + be run sooner, and tasks scheduled later will be more likely to be run later. + + + + + Specifies that a task will be a long-running, course-grained operation. It provides a hint to the + TaskScheduler that oversubscription may be + warranted. + + + + + Specifies that a task is attached to a parent in the task hierarchy. + + + + + Task creation flags which are only used internally. + + + + Specifies "No internal task options" + + + Used to filter out internal vs. public task creation options. + + + Specifies that the task will be queued by the runtime before handing it over to the user. + This flag will be used to skip the cancellationtoken registration step, which is only meant for unstarted tasks. + + + + Specifies flags that control optional behavior for the creation and execution of continuation tasks. + + + + + Default = "Continue on any, no task options, run asynchronously" + Specifies that the default behavior should be used. Continuations, by default, will + be scheduled when the antecedent task completes, regardless of the task's final TaskStatus. + + + + + A hint to a TaskScheduler to schedule a + task in as fair a manner as possible, meaning that tasks scheduled sooner will be more likely to + be run sooner, and tasks scheduled later will be more likely to be run later. + + + + + Specifies that a task will be a long-running, course-grained operation. It provides + a hint to the TaskScheduler that + oversubscription may be warranted. + + + + + Specifies that a task is attached to a parent in the task hierarchy. + + + + + Specifies that the continuation task should not be scheduled if its antecedent ran to completion. + This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should not be scheduled if its antecedent threw an unhandled + exception. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should not be scheduled if its antecedent was canceled. This + option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent ran to + completion. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent threw an + unhandled exception. This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be scheduled only if its antecedent was canceled. + This option is not valid for multi-task continuations. + + + + + Specifies that the continuation task should be executed synchronously. With this option + specified, the continuation will be run on the same thread that causes the antecedent task to + transition into its final state. If the antecedent is already complete when the continuation is + created, the continuation will run on the thread creating the continuation. Only very + short-running continuations should be executed synchronously. + + + + + Represents an exception used to communicate task cancellation. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + class with a specified error message and a reference to the inner exception that is the cause of + this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + + Initializes a new instance of the class + with a reference to the that has been canceled. + + A task that has been canceled. + + + + Gets the task associated with this exception. + + + It is permissible for no Task to be associated with a + , in which case + this property will return null. + + + + + Represents the producer side of a unbound to a + delegate, providing access to the consumer side through the property. + + + + It is often the case that a is desired to + represent another asynchronous operation. + TaskCompletionSource is provided for this purpose. It enables + the creation of a task that can be handed out to consumers, and those consumers can use the members + of the task as they would any other. However, unlike most tasks, the state of a task created by a + TaskCompletionSource is controlled explicitly by the methods on TaskCompletionSource. This enables the + completion of the external asynchronous operation to be propagated to the underlying Task. The + separation also ensures that consumers are not able to transition the state without access to the + corresponding TaskCompletionSource. + + + All members of are thread-safe + and may be used from multiple threads concurrently. + + + The type of the result value assocatied with this . + + + + Creates a . + + + + + Creates a + with the specified options. + + + The created + by this instance and accessible through its property + will be instantiated using the specified . + + The options to use when creating the underlying + . + + The represent options invalid for use + with a . + + + + + Creates a + with the specified state. + + The state to use as the underlying + 's AsyncState. + + + + Creates a with + the specified state and options. + + The options to use when creating the underlying + . + The state to use as the underlying + 's AsyncState. + + The represent options invalid for use + with a . + + + + + Attempts to transition the underlying + into the + Faulted + state. + + The exception to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The argument is null. + The was disposed. + + + + Attempts to transition the underlying + into the + Faulted + state. + + The collection of exceptions to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The argument is null. + There are one or more null elements in . + The collection is empty. + The was disposed. + + + + Transitions the underlying + into the + Faulted + state. + + The exception to bind to this . + The argument is null. + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + Faulted + state. + + The collection of exceptions to bind to this . + The argument is null. + There are one or more null elements in . + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Attempts to transition the underlying + into the + RanToCompletion + state. + + The result value to bind to this . + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + RanToCompletion + state. + + The result value to bind to this . + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Transitions the underlying + into the + Canceled + state. + + + The underlying is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Attempts to transition the underlying + into the + Canceled + state. + + True if the operation was successful; otherwise, false. + This operation will return false if the + is already in one + of the three final states: + RanToCompletion, + Faulted, or + Canceled. + + The was disposed. + + + + Gets the created + by this . + + + This property enables a consumer access to the that is controlled by this instance. + The , , + , and + methods (and their "Try" variants) on this instance all result in the relevant state + transitions on this underlying Task. + + + + + An exception holder manages a list of exceptions for one particular task. + It offers the ability to aggregate, but more importantly, also offers intrinsic + support for propagating unhandled exceptions that are never observed. It does + this by aggregating and throwing if the holder is ever GC'd without the holder's + contents ever having been requested (e.g. by a Task.Wait, Task.get_Exception, etc). + + + + + Creates a new holder; it will be registered for finalization. + + The task this holder belongs to. + + + + A finalizer that repropagates unhandled exceptions. + + + + + Add an exception to the internal list. This will ensure the holder is + in the proper state (handled/unhandled) depending on the list's contents. + + An exception object (either an Exception or an + IEnumerable{Exception}) to add to the list. + + + + A private helper method that ensures the holder is considered + unhandled, i.e. it is registered for finalization. + + + + + A private helper method that ensures the holder is considered + handled, i.e. it is not registered for finalization. + + Whether this is called from the finalizer thread. + + + + Allocates a new aggregate exception and adds the contents of the list to + it. By calling this method, the holder assumes exceptions to have been + "observed", such that the finalization check will be subsequently skipped. + + Whether this is being called from a finalizer. + An extra exception to be included (optionally). + The aggregate exception to throw. + + + + Provides a set of static (Shared in Visual Basic) methods for working with specific kinds of + instances. + + + + + Creates a proxy Task that represents the + asynchronous operation of a Task{Task}. + + + It is often useful to be able to return a Task from a + Task{TResult}, where the inner Task represents work done as part of the outer Task{TResult}. However, + doing so results in a Task{Task}, which, if not dealt with carefully, could produce unexpected behavior. Unwrap + solves this problem by creating a proxy Task that represents the entire asynchronous operation of such a Task{Task}. + + The Task{Task} to unwrap. + The exception that is thrown if the + argument is null. + A Task that represents the asynchronous operation of the provided Task{Task}. + + + + Creates a proxy Task{TResult} that represents the + asynchronous operation of a Task{Task{TResult}}. + + + It is often useful to be able to return a Task{TResult} from a Task{TResult}, where the inner Task{TResult} + represents work done as part of the outer Task{TResult}. However, doing so results in a Task{Task{TResult}}, + which, if not dealt with carefully, could produce unexpected behavior. Unwrap solves this problem by + creating a proxy Task{TResult} that represents the entire asynchronous operation of such a Task{Task{TResult}}. + + The Task{Task{TResult}} to unwrap. + The exception that is thrown if the + argument is null. + A Task{TResult} that represents the asynchronous operation of the provided Task{Task{TResult}}. /// Unwraps a Task that returns another Task. + + + + Provides support for creating and scheduling + Tasks. + + + + There are many common patterns for which tasks are relevant. The + class encodes some of these patterns into methods that pick up default settings, which are + configurable through its constructors. + + + A default instance of is available through the + Task.Factory property. + + + + + + Initializes a instance with the default configuration. + + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + This constructor creates a instance with a default configuration. The + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The + TaskScheduler to use to schedule any tasks created with this TaskFactory. A null value + indicates that the current TaskScheduler should be used. + + + With this constructor, the + property is initialized to + TaskCreationOptions.None, the + property is initialized to TaskContinuationOptions.None, + and the TaskScheduler property is + initialized to , unless it's null, in which case the property is + initialized to the current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory. + + + The exception that is thrown when the + argument or the + argument specifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Initializes a instance with the specified configuration. + + The default that will be assigned + to tasks created by this unless another CancellationToken is explicitly specified + while calling the factory methods. + + The default + TaskCreationOptions to use when creating tasks with this TaskFactory. + + + The default + TaskContinuationOptions to use when creating continuation tasks with this TaskFactory. + + + The default + TaskScheduler to use to schedule any Tasks created with this TaskFactory. A null value + indicates that TaskScheduler.Current should be used. + + + The exception that is thrown when the + argument or the + argumentspecifies an invalid value. + + + With this constructor, the + property is initialized to , + the + property is initialized to , and the TaskScheduler property is initialized to + , unless it's null, in which case the property is initialized to the + current scheduler (see TaskScheduler.Current). + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The started Task. + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors + and then calling + Start to schedule it for execution. However, + unless creation and scheduling must be separated, StartNew is the recommended + approach for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The that will be assigned to the new task. + The started Task. + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors + and then calling + Start to schedule it for execution. However, + unless creation and scheduling must be separated, StartNew is the recommended + approach for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + The that will be assigned to the new + A TaskCreationOptions value that controls the behavior of the + created + Task. + The TaskScheduler + that is used to schedule the created Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The started Task. + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The that will be assigned to the new + The started Task. + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a Task. + + The action delegate to execute asynchronously. + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + Task. + The TaskScheduler + that is used to schedule the created Task. + The started Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a Task using one of its constructors and + then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The started . + The exception that is thrown when the + argument is null. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new + The started . + The exception that is thrown when the + argument is null. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + A TaskCreationOptions value that controls the behavior of the + created + . + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates and starts a . + + The type of the result available through the + Task. + + A function delegate that returns the future result to be available through + the . + An object containing data to be used by the + delegate. + The that will be assigned to the new task. + A TaskCreationOptions value that controls the behavior of the + created + . + The TaskScheduler + that is used to schedule the created + Task{TResult}. + The started . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The provided CancellationToken + has already been disposed. + + + Calling StartNew is functionally equivalent to creating a using one + of its constructors and then calling + Start to schedule it for execution. + However, unless creation and scheduling must be separated, StartNew is the recommended approach + for both simplicity and performance. + + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the asynchronous + operation. + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the asynchronous + operation. + + + + Creates a Task that executes an end method action + when a specified IAsyncResult completes. + + The IAsyncResult whose completion should trigger the processing of the + . + The action delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the asynchronous + operation. + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of begin + and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the + delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that represents the + asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that executes an end + method function when a specified IAsyncResult completes. + + The type of the result available through the + Task. + + The IAsyncResult whose completion should trigger the processing of the + . + The function delegate that processes the completed . + The TaskScheduler + that is used to schedule the task that executes the end method. + The TaskCreationOptions value that controls the behavior of the + created Task. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + A Task that represents the + asynchronous operation. + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Creates a Task that represents a pair of + begin and end methods that conform to the Asynchronous Programming Model pattern. + + The type of the first argument passed to the delegate. + The type of the second argument passed to + delegate. + The type of the third argument passed to + delegate. + The type of the result available through the + Task. + + The delegate that begins the asynchronous operation. + The delegate that ends the asynchronous operation. + The first argument passed to the + delegate. + The second argument passed to the + delegate. + The third argument passed to the + delegate. + The TaskCreationOptions value that controls the behavior of the + created Task. + An object containing data to be used by the + delegate. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument specifies an invalid TaskCreationOptions + value. + The created Task that + represents the asynchronous operation. + + This method throws any exceptions thrown by the . + + + + + Check validity of options passed to FromAsync method + + The options to be validated. + determines type of FromAsync method that called this method + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in + the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result of the antecedent . + The array of tasks from which to continue. + The action delegate to execute when all tasks in the array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of a set of provided Tasks. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue. + The function delegate to execute when all tasks in the + array have completed. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAll. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation Task. + The new continuation Task. + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result that is returned by the + delegate and associated with the created . + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The function delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Creates a continuation Task + that will be started upon the completion of any Task in the provided set. + + The type of the result of the antecedent . + The array of tasks from which to continue when one task completes. + The action delegate to execute when one task in the + array completes. + The CancellationToken + that will be assigned to the new continuation task. + The + TaskContinuationOptions value that controls the behavior of + the created continuation Task. + The TaskScheduler + that is used to schedule the created continuation . + The new continuation . + The exception that is thrown when the + array is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + argument is null. + The exception that is thrown when the + array contains a null value. + The exception that is thrown when the + array is empty. + The exception that is thrown when the + argument specifies an invalid TaskContinuationOptions + value. + The exception that is thrown when one + of the elements in the array has been disposed. + The provided CancellationToken + has already been disposed. + + + The NotOn* and OnlyOn* TaskContinuationOptions, + which constrain for which TaskStatus states a continuation + will be executed, are illegal with ContinueWhenAny. + + + + + Gets the default CancellationToken of this + TaskFactory. + + + This property returns the default that will be assigned to all + tasks created by this factory unless another CancellationToken value is explicitly specified + during the call to the factory methods. + + + + + Gets the TaskScheduler of this + TaskFactory. + + + This property returns the default scheduler for this factory. It will be used to schedule all + tasks unless another scheduler is explicitly specified during calls to this factory's methods. + If null, TaskScheduler.Current + will be used. + + + + + Gets the TaskCreationOptions + value of this TaskFactory. + + + This property returns the default creation options for this factory. They will be used to create all + tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Gets the TaskContinuationOptions + value of this TaskFactory. + + + This property returns the default continuation options for this factory. They will be used to create + all continuation tasks unless other options are explicitly specified during calls to this factory's methods. + + + + + Represents an abstract scheduler for tasks. + + + + TaskScheduler acts as the extension point for all + pluggable scheduling logic. This includes mechanisms such as how to schedule a task for execution, and + how scheduled tasks should be exposed to debuggers. + + + All members of the abstract type are thread-safe + and may be used from multiple threads concurrently. + + + + + + Queues a Task to the scheduler. + + + + A class derived from TaskScheduler + implements this method to accept tasks being scheduled on the scheduler. + A typical implementation would store the task in an internal data structure, which would + be serviced by threads that would execute those tasks at some time in the future. + + + This method is only meant to be called by the .NET Framework and + should not be called directly by the derived class. This is necessary + for maintaining the consistency of the system. + + + The Task to be queued. + The argument is null. + + + + Determines whether the provided Task + can be executed synchronously in this call, and if it can, executes it. + + + + A class derived from TaskScheduler implements this function to + support inline execution of a task on a thread that initiates a wait on that task object. Inline + execution is optional, and the request may be rejected by returning false. However, better + scalability typically results the more tasks that can be inlined, and in fact a scheduler that + inlines too little may be prone to deadlocks. A proper implementation should ensure that a + request executing under the policies guaranteed by the scheduler can successfully inline. For + example, if a scheduler uses a dedicated thread to execute tasks, any inlining requests from that + thread should succeed. + + + If a scheduler decides to perform the inline execution, it should do so by calling to the base + TaskScheduler's + TryExecuteTask method with the provided task object, propagating + the return value. It may also be appropriate for the scheduler to remove an inlined task from its + internal data structures if it decides to honor the inlining request. Note, however, that under + some circumstances a scheduler may be asked to inline a task that was not previously provided to + it with the method. + + + The derived scheduler is responsible for making sure that the calling thread is suitable for + executing the given task as far as its own scheduling and execution policies are concerned. + + + The Task to be + executed. + A Boolean denoting whether or not task has previously been + queued. If this parameter is True, then the task may have been previously queued (scheduled); if + False, then the task is known not to have been queued, and this call is being made in order to + execute the task inline without queueing it. + A Boolean value indicating whether the task was executed inline. + The argument is + null. + The was already + executed. + + + + Generates an enumerable of Task instances + currently queued to the scheduler waiting to be executed. + + + + A class derived from implements this method in order to support + integration with debuggers. This method will only be invoked by the .NET Framework when the + debugger requests access to the data. The enumerable returned will be traversed by debugging + utilities to access the tasks currently queued to this scheduler, enabling the debugger to + provide a representation of this information in the user interface. + + + It is important to note that, when this method is called, all other threads in the process will + be frozen. Therefore, it's important to avoid synchronization with other threads that may lead to + blocking. If synchronization is necessary, the method should prefer to throw a + than to block, which could cause a debugger to experience delays. Additionally, this method and + the enumerable returned must not modify any globally visible state. + + + The returned enumerable should never be null. If there are currently no queued tasks, an empty + enumerable should be returned instead. + + + For developers implementing a custom debugger, this method shouldn't be called directly, but + rather this functionality should be accessed through the internal wrapper method + GetScheduledTasksForDebugger: + internal Task[] GetScheduledTasksForDebugger(). This method returns an array of tasks, + rather than an enumerable. In order to retrieve a list of active schedulers, a debugger may use + another internal method: internal static TaskScheduler[] GetTaskSchedulersForDebugger(). + This static method returns an array of all active TaskScheduler instances. + GetScheduledTasksForDebugger then may be used on each of these scheduler instances to retrieve + the list of scheduled tasks for each. + + + An enumerable that allows traversal of tasks currently queued to this scheduler. + + + This scheduler is unable to generate a list of queued tasks at this time. + + + + + Retrieves some thread static state that can be cached and passed to multiple + TryRunInline calls, avoiding superflous TLS fetches. + + A bag of TLS state (or null if none exists). + + + + Attempts to execute the target task synchronously. + + The task to run. + True if the task may have been previously queued, + false if the task was absolutely not previously queued. + The state retrieved from GetThreadStatics + True if it ran, false otherwise. + + + + Attempts to dequeue a Task that was previously queued to + this scheduler. + + The Task to be dequeued. + A Boolean denoting whether the argument was successfully dequeued. + The argument is null. + + + + Notifies the scheduler that a work item has made progress. + + + + + Initializes the . + + + + + Frees all resources associated with this scheduler. + + + + + Creates a + associated with the current . + + + All Task instances queued to + the returned scheduler will be executed through a call to the + Post method + on that context. + + + A associated with + the current SynchronizationContext, as + determined by SynchronizationContext.Current. + + + The current SynchronizationContext may not be used as a TaskScheduler. + + + + + Attempts to execute the provided Task + on this scheduler. + + + + Scheduler implementations are provided with Task + instances to be executed through either the method or the + method. When the scheduler deems it appropriate to run the + provided task, should be used to do so. TryExecuteTask handles all + aspects of executing a task, including action invocation, exception handling, state management, + and lifecycle control. + + + must only be used for tasks provided to this scheduler by the .NET + Framework infrastructure. It should not be used to execute arbitrary tasks obtained through + custom mechanisms. + + + + A Task object to be executed. + + The is not associated with this scheduler. + + A Boolean that is true if was successfully executed, false if it + was not. A common reason for execution failure is that the task had previously been executed or + is in the process of being executed by another thread. + + + + Provides an array of all queued Task instances + for the debugger. + + + The returned array is populated through a call to . + Note that this function is only meant to be invoked by a debugger remotely. + It should not be called by any other codepaths. + + An array of Task instances. + + This scheduler is unable to generate a list of queued tasks at this time. + + + + + Provides an array of all active TaskScheduler + instances for the debugger. + + + This function is only meant to be invoked by a debugger remotely. + It should not be called by any other codepaths. + + An array of TaskScheduler instances. + + + + Registers a new TaskScheduler instance in the global collection of schedulers. + + + + + Removes a TaskScheduler instance from the global collection of schedulers. + + + + + Indicates the maximum concurrency level this + is able to support. + + + + + Indicates whether this is a custom scheduler, in which case the safe code paths will be taken upon task entry + using a CAS to transition from queued state to executing. + + + + + Gets the default TaskScheduler instance. + + + + + Gets the TaskScheduler + associated with the currently executing task. + + + When not called from within a task, will return the scheduler. + + + + + Gets the unique ID for this . + + + + + Occurs when a faulted 's unobserved exception is about to trigger exception escalation + policy, which, by default, would terminate the process. + + + This AppDomain-wide event provides a mechanism to prevent exception + escalation policy (which, by default, terminates the process) from triggering. + Each handler is passed a + instance, which may be used to examine the exception and to mark it as observed. + + + + + Nested class that provides debugger view for TaskScheduler + + + + Default thread pool scheduler. + + + + A TaskScheduler implementation that executes all tasks queued to it through a call to + on the + that its associated with. The default constructor for this class binds to the current + + + + + Constructs a SynchronizationContextTaskScheduler associated with + + This constructor expects to be set. + + + + Implemetation of for this scheduler class. + + Simply posts the tasks to be executed on the associated . + + + + + + Implementation of for this scheduler class. + + The task will be executed inline only if the call happens within + the associated . + + + + + + + Implementes the property for + this scheduler class. + + By default it returns 1, because a based + scheduler only supports execution on a single thread. + + + + + Provides data for the event that is raised when a faulted 's + exception goes unobserved. + + + The Exception property is used to examine the exception without marking it + as observed, whereas the method is used to mark the exception + as observed. Marking the exception as observed prevents it from triggering exception escalation policy + which, by default, terminates the process. + + + + + Initializes a new instance of the class + with the unobserved exception. + + The Exception that has gone unobserved. + + + + Marks the as "observed," thus preventing it + from triggering exception escalation policy which, by default, terminates the process. + + + + + Gets whether this exception has been marked as "observed." + + + + + The Exception that went unobserved. + + + + + Represents an exception used to communicate an invalid operation by a + . + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the + class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the + class using the default error message and a reference to the inner exception that is the cause of + this exception. + + The exception that is the cause of the current exception. + + + + Initializes a new instance of the + class with a specified error message and a reference to the inner exception that is the cause of + this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Runtime.dll b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Runtime.dll new file mode 100644 index 0000000..fa831ad Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Runtime.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Runtime.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Runtime.xml new file mode 100644 index 0000000..93cb00d --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Runtime.xml @@ -0,0 +1,56 @@ + + + + System.Runtime + + + + Defines a provider for progress updates. + The type of progress update value. + + + Reports a progress update. + The value of the updated progress. + + + Identities the async state machine type for this method. + + + Identities the state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + Gets the type that implements the state machine. + + + Initializes the attribute. + The type that implements the state machine. + + + + Allows you to obtain the method or property name of the caller to the method. + + + + + Allows you to obtain the line number in the source file at which the method is called. + + + + + Allows you to obtain the full path of the source file that contains the caller. + This is the file path at the time of compile. + + + + Identities the iterator state machine type for this method. + + + Initializes the attribute. + The type that implements the state machine. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Threading.Tasks.dll b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Threading.Tasks.dll new file mode 100644 index 0000000..ebbac4c Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Threading.Tasks.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Threading.Tasks.xml b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Threading.Tasks.xml new file mode 100644 index 0000000..b47921e --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/sl5/System.Threading.Tasks.xml @@ -0,0 +1,475 @@ + + + + System.Threading.Tasks + + + + Holds state related to the builder's IAsyncStateMachine. + This is a mutable struct. Be very delicate with it. + + + A reference to the heap-allocated state machine object associated with this builder. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument is null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + + Gets the Action to use with an awaiter's OnCompleted or UnsafeOnCompleted method. + On first invocation, the supplied state machine will be boxed. + + Specifies the type of the method builder used. + Specifies the type of the state machine used. + The builder. + The state machine. + An Action to provide to the awaiter. + + + Provides the ability to invoke a state machine's MoveNext method under a supplied ExecutionContext. + + + The context with which to run MoveNext. + + + The state machine whose MoveNext method should be invoked. + + + Initializes the runner. + The context with which to run MoveNext. + + + Invokes MoveNext under the provided context. + + + Cached delegate used with ExecutionContext.Run. + + + Invokes the MoveNext method on the supplied IAsyncStateMachine. + The IAsyncStateMachine machine instance. + + + Provides a base class used to cache tasks of a specific return type. + Specifies the type of results the cached tasks return. + + + + A singleton cache for this result type. + This may be null if there are no cached tasks for this TResult. + + + + Creates a non-disposable task. + The result for the task. + The cacheable task. + + + Creates a cache. + A task cache for this result type. + + + Gets a cached task if one exists. + The result for which we want a cached task. + A cached task if one exists; otherwise, null. + + + Provides a cache for Boolean tasks. + + + A true task. + + + A false task. + + + Gets a cached task for the Boolean result. + true or false + A cached task for the Boolean result. + + + Provides a cache for zero Int32 tasks. + + + The minimum value, inclusive, for which we want a cached task. + + + The maximum value, exclusive, for which we want a cached task. + + + The cache of Task{Int32}. + + + Creates an array of cached tasks for the values in the range [INCLUSIVE_MIN,EXCLUSIVE_MAX). + + + Gets a cached task for the zero Int32 result. + The integer value + A cached task for the Int32 result or null if not cached. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + Represents an asynchronous method builder. + + + A cached VoidTaskResult task used for builders that complete synchronously. + + + The generic builder object to which this non-generic instance delegates. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state. + + The builder is not initialized. + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + + Gets the for this builder. + The representing the builder's asynchronous operation. + The builder is not initialized. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + + Provides a builder for asynchronous methods that return . + This type is intended for compiler use only. + + + AsyncTaskMethodBuilder{TResult} is a value type, and thus it is copied by value. + Prior to being copied, one of its Task, SetResult, or SetException members must be accessed, + or else the copies may end up building distinct Task instances. + + + + A cached task for default(TResult). + + + State related to the IAsyncStateMachine. + + + The lazily-initialized task. + Must be named m_task for debugger step-over to work correctly. + + + The lazily-initialized task completion source. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Initializes a new . + The initialized . + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Completes the in the + RanToCompletion state with the specified result. + + The result to use to complete the task. + The task has already completed. + + + + Completes the builder by using either the supplied completed task, or by completing + the builder's previously accessed task using default(TResult). + + A task already completed with the value default(TResult). + The task has already completed. + + + + Completes the in the + Faulted state with the specified exception. + + The to use to fault the task. + The argument is null (Nothing in Visual Basic). + The task has already completed. + + + + Called by the debugger to request notification when the first wait operation + (await, Wait, Result, etc.) on this builder's task completes. + + + true to enable notification; false to disable a previously set notification. + + + This should only be invoked from within an asynchronous method, + and only by the debugger. + + + + + Gets a task for the specified result. This will either + be a cached or new task, never null. + + The result for which we need a task. + The completed task containing the result. + + + Gets the lazily-initialized TaskCompletionSource. + + + Gets the for this builder. + The representing the builder's asynchronous operation. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger, and only in a single-threaded manner + when no other threads are in the middle of accessing this property or this.Task. + + + + + Provides a builder for asynchronous methods that return void. + This type is intended for compiler use only. + + + + The synchronization context associated with this operation. + + + State related to the IAsyncStateMachine. + + + An object used by the debugger to uniquely identify this builder. Lazily initialized. + + + Temporary support for disabling crashing if tasks go unobserved. + + + Registers with UnobservedTaskException to suppress exception crashing. + + + Non-zero if PreventUnobservedTaskExceptions has already been invoked. + + + Initializes a new . + The initialized . + + + Initializes the . + The synchronizationContext associated with this operation. This may be null. + + + Initiates the builder's execution with the associated state machine. + Specifies the type of the state machine. + The state machine instance, passed by reference. + The argument was null (Nothing in Visual Basic). + + + Associates the builder with the state machine it represents. + The heap-allocated state machine object. + The argument was null (Nothing in Visual Basic). + The builder is incorrectly initialized. + + + Perform any initialization necessary prior to lifting the builder to the heap. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + + Schedules the specified state machine to be pushed forward when the specified awaiter completes. + + Specifies the type of the awaiter. + Specifies the type of the state machine. + The awaiter. + The state machine. + + + Completes the method builder successfully. + + + Faults the method builder with an exception. + The exception that is the cause of this fault. + The argument is null (Nothing in Visual Basic). + The builder is not initialized. + + + Notifies the current synchronization context that the operation completed. + + + + Gets an object that may be used to uniquely identify this builder to the debugger. + + + This property lazily instantiates the ID in a non-thread-safe manner. + It must only be used by the debugger and only in a single-threaded manner. + + + + + Represents state machines generated for asynchronous methods. + This type is intended for compiler use only. + + + + Moves the state machine to its next state. + + + Configures the state machine with a heap-allocated replica. + The heap-allocated replica. + + + + Represents an awaiter used to schedule continuations when an await operation completes. + + + + + Represents an operation that will schedule continuations when the operation completes. + + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + + + Schedules the continuation action to be invoked when the instance completes. + The action to invoke when the operation completes. + The argument is null (Nothing in Visual Basic). + Unlike OnCompleted, UnsafeOnCompleted need not propagate ExecutionContext information. + + + Used with Task(of void) + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/win8/_._ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/win8/_._ new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/wp8/_._ b/Rx/NET/Source/packages/Microsoft.Bcl.1.0.19/lib/wp8/_._ new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/License.rtf b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/License.rtf new file mode 100644 index 0000000..78ff93d --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/License.rtf @@ -0,0 +1,522 @@ +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff40\deff0\stshfdbch31506\stshfloch31506\stshfhich31506\stshfbi31507\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs1025{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} +{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;} +{\f11\fbidi \fmodern\fcharset128\fprq1{\*\panose 00000000000000000000}MS Mincho{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};}{\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt \'cb\'ce\'cc\'e5};} +{\f34\fbidi \froman\fcharset1\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f39\fbidi \fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Trebuchet MS{\*\falt Arial};} +{\f40\fbidi \fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Tahoma{\*\falt ?? ??};}{\f44\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}@SimSun;}{\f45\fbidi \fmodern\fcharset128\fprq1{\*\panose 02020609040205080304}@MS Mincho;} +{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 00000000000000000000}Cambria;}{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}{\f46\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\f47\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f49\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f50\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f51\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\f52\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f53\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f54\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f66\fbidi \fmodern\fcharset238\fprq1 Courier New CE;} +{\f67\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}{\f69\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f70\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f71\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);} +{\f72\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f73\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f74\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);} +{\f158\fbidi \fmodern\fcharset0\fprq1 MS Mincho Western{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};}{\f156\fbidi \fmodern\fcharset238\fprq1 MS Mincho CE{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};} +{\f157\fbidi \fmodern\fcharset204\fprq1 MS Mincho Cyr{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};}{\f159\fbidi \fmodern\fcharset161\fprq1 MS Mincho Greek{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};} +{\f160\fbidi \fmodern\fcharset162\fprq1 MS Mincho Tur{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};}{\f163\fbidi \fmodern\fcharset186\fprq1 MS Mincho Baltic{\*\falt \'82\'6c\'82\'72 \'96\'be\'92\'a9};} +{\f436\fbidi \fswiss\fcharset238\fprq2 Trebuchet MS CE{\*\falt Arial};}{\f437\fbidi \fswiss\fcharset204\fprq2 Trebuchet MS Cyr{\*\falt Arial};}{\f439\fbidi \fswiss\fcharset161\fprq2 Trebuchet MS Greek{\*\falt Arial};} +{\f440\fbidi \fswiss\fcharset162\fprq2 Trebuchet MS Tur{\*\falt Arial};}{\f443\fbidi \fswiss\fcharset186\fprq2 Trebuchet MS Baltic{\*\falt Arial};}{\f446\fbidi \fswiss\fcharset238\fprq2 Tahoma CE{\*\falt ?? ??};} +{\f447\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr{\*\falt ?? ??};}{\f449\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek{\*\falt ?? ??};}{\f450\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur{\*\falt ?? ??};} +{\f451\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew){\*\falt ?? ??};}{\f452\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic){\*\falt ?? ??};}{\f453\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic{\*\falt ?? ??};} +{\f454\fbidi \fswiss\fcharset163\fprq2 Tahoma (Vietnamese){\*\falt ?? ??};}{\f455\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai){\*\falt ?? ??};}{\f488\fbidi \fnil\fcharset0\fprq2 @SimSun Western;}{\f498\fbidi \fmodern\fcharset0\fprq1 @MS Mincho Western;} +{\f496\fbidi \fmodern\fcharset238\fprq1 @MS Mincho CE;}{\f497\fbidi \fmodern\fcharset204\fprq1 @MS Mincho Cyr;}{\f499\fbidi \fmodern\fcharset161\fprq1 @MS Mincho Greek;}{\f500\fbidi \fmodern\fcharset162\fprq1 @MS Mincho Tur;} +{\f503\fbidi \fmodern\fcharset186\fprq1 @MS Mincho Baltic;}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;} +{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;} +{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;} +{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} +{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \fswiss\fcharset238\fprq2 Arial CE;} +{\fbiminor\f31579\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;}{\fbiminor\f31581\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\fbiminor\f31582\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\fbiminor\f31583\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);} +{\fbiminor\f31584\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);}{\fbiminor\f31585\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\fbiminor\f31586\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255; +\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0; +\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\ctextone\ctint255\cshade255\red0\green0\blue0;}{\*\defchp \f31506\fs22 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \snext0 \sautoupd \sqformat \spriority0 \styrsid15686224 Normal;}{\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext1 \slink15 \sqformat \styrsid15686224 heading 1;}{\s2\ql \fi-363\li720\ri0\sb120\sa120\widctlpar\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0 \rtlch\fcs1 +\ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext2 \slink16 \sqformat \styrsid15686224 heading 2;}{\s3\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\tx1077\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext3 \slink17 \sqformat \styrsid15686224 heading 3;}{\s4\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl3\outlinelevel3\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 +\af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext4 \slink18 \sqformat \styrsid15686224 heading 4;}{\s5\ql \fi-357\li1792\ri0\sb120\sa120\widctlpar +\tx1792\jclisttab\tx2155\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl4\outlinelevel4\adjustright\rin0\lin1792\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext5 \slink19 \sqformat \styrsid15686224 heading 5;}{\s6\ql \fi-357\li2149\ri0\sb120\sa120\widctlpar\jclisttab\tx2152\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl5\outlinelevel5\adjustright\rin0\lin2149\itap0 \rtlch\fcs1 +\af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext6 \slink20 \sqformat \styrsid15686224 heading 6;}{\s7\ql \fi-357\li2506\ri0\sb120\sa120\widctlpar +\jclisttab\tx2509\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl6\outlinelevel6\adjustright\rin0\lin2506\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext7 \slink21 \sqformat \styrsid15686224 heading 7;}{\s8\ql \fi-357\li2863\ri0\sb120\sa120\widctlpar\jclisttab\tx2866\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl7\outlinelevel7\adjustright\rin0\lin2863\itap0 \rtlch\fcs1 +\af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext8 \slink22 \sqformat \styrsid15686224 heading 8;}{\s9\ql \fi-358\li3221\ri0\sb120\sa120\widctlpar +\jclisttab\tx3223\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl8\outlinelevel8\adjustright\rin0\lin3221\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext9 \slink23 \sqformat \styrsid15686224 heading 9;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}{\*\cs15 \additive +\rtlch\fcs1 \ab\af40\afs19 \ltrch\fcs0 \b\fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink1 \slocked \styrsid15686224 Heading 1 Char;}{\*\cs16 \additive \rtlch\fcs1 \ab\af40\afs19 \ltrch\fcs0 \b\fs19\loch\f40\hich\af40\dbch\af11 +\sbasedon10 \slink2 \slocked \styrsid15686224 Heading 2 Char;}{\*\cs17 \additive \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink3 \slocked \styrsid15686224 Heading 3 Char;}{\*\cs18 \additive \rtlch\fcs1 +\af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink4 \slocked \styrsid15686224 Heading 4 Char;}{\*\cs19 \additive \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 +\sbasedon10 \slink5 \slocked \styrsid15686224 Heading 5 Char;}{\*\cs20 \additive \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink6 \slocked \styrsid15686224 Heading 6 Char;}{\*\cs21 \additive \rtlch\fcs1 +\af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink7 \slocked \styrsid15686224 Heading 7 Char;}{\*\cs22 \additive \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 +\sbasedon10 \slink8 \slocked \styrsid15686224 Heading 8 Char;}{\*\cs23 \additive \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink9 \slocked \styrsid15686224 Heading 9 Char;}{ +\s24\ql \li357\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext24 \styrsid15686224 Body 1;}{\s25\ql \fi-363\li720\ri0\sb120\sa120\widctlpar\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext25 \styrsid15686224 Bullet 2;}{\s26\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar +\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext26 \styrsid15686224 Bullet 4;}{\s27\ql \fi-357\li1792\ri0\sb120\sa120\widctlpar\jclisttab\tx1795\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin1792\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext27 \styrsid15686224 Bullet 5;}{\s28\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\ab\af40\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \styrsid15686224 Heading EULA;}{\s29\ql \li0\ri0\sb120\sa120\widctlpar\brdrb\brdrs\brdrw10\brsp20 +\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af40\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \styrsid15686224 +Heading Software Title;}{\s30\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext30 \styrsid15686224 Preamble;}{\s31\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\tx1077\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls4\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon3 \snext31 \slink38 \styrsid15686224 Heading 3 Bold;}{\s32\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\ul\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon26 \snext32 \styrsid15686224 Bullet 4 Underline;}{\*\cs33 \additive \rtlch\fcs1 \af40 \ltrch\fcs0 \f40\lang1033\langfe1033\langnp1033\langfenp1033 +\sbasedon10 \styrsid15686224 Body 2 Char;}{\*\cs34 \additive \rtlch\fcs1 \af40 \ltrch\fcs0 \f40\lang1033\langfe1033\langnp1033\langfenp1033 \sbasedon10 \styrsid15686224 Body 3 Char;}{\s35\ql \li0\ri0\sb120\sa120\widctlpar\brdrt\brdrs\brdrw10\brsp20 +\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon30 \snext35 \styrsid15686224 +Preamble Border Above;}{\*\cs36 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf2 \sbasedon10 \styrsid15686224 Hyperlink,Char Char7;}{\s37\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \snext0 \slink39 \styrsid15686224 Body 0 Bold;}{\*\cs38 \additive \rtlch\fcs1 \ab\af40\afs19 \ltrch\fcs0 +\b\fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink31 \slocked \styrsid15686224 Heading 3 Bold Char;}{\*\cs39 \additive \rtlch\fcs1 \ab\af40\afs19 \ltrch\fcs0 \b\fs19\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink37 \slocked \styrsid15686224 +Body 0 Bold Char;}{\*\cs40 \additive \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \f40\fs20 \sbasedon10 \slink41 \slocked \styrsid15686224 Bullet 3 Char1;}{\s41\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \f40\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext41 \slink40 \styrsid15686224 Bullet 3;}{ +\s42\ql \fi-357\li357\ri0\sb120\sa120\widctlpar\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \f40\fs20\ul\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 +\sbasedon41 \snext42 \sautoupd \styrsid15686224 Bullet 3 Underline;}{\s43\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af40\afs16\alang1025 \ltrch\fcs0 +\fs16\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext43 \slink44 \ssemihidden \sunhideused \styrsid3699522 Balloon Text;}{\*\cs44 \additive \rtlch\fcs1 \af40\afs16 \ltrch\fcs0 +\fs16\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink43 \slocked \ssemihidden \styrsid3699522 Balloon Text Char;}{\*\cs45 \additive \rtlch\fcs1 \af0\afs16 \ltrch\fcs0 \fs16 \sbasedon10 \ssemihidden \sunhideused \styrsid3699522 annotation reference;}{ +\s46\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext46 \slink47 \ssemihidden \sunhideused \styrsid3699522 annotation text;}{\*\cs47 \additive \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\f40\hich\af40\dbch\af11 \sbasedon10 \slink46 \slocked \ssemihidden \styrsid3699522 +Comment Text Char;}{\s48\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af40\afs20\alang1025 \ltrch\fcs0 +\b\fs20\lang1033\langfe1033\loch\f40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon46 \snext46 \slink49 \ssemihidden \sunhideused \styrsid3699522 annotation subject;}{\*\cs49 \additive \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 +\b\fs20\loch\f40\hich\af40\dbch\af11 \sbasedon47 \slink48 \slocked \ssemihidden \styrsid3699522 Comment Subject Char;}}{\*\listtable{\list\listtemplateid1928476992{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af39\afs20 \ltrch\fcs0 \b\i0\f39\fs20\fbias0 \fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af39\afs20 \ltrch\fcs0 \b\i0\f39\fs20\fbias0 \fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\fbias0 \s31\fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0 \fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0 \fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid398796681} +{\list\listtemplateid789093748\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-317712510\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s25\fi-363\li720 +\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23 +\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691 +\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;} +\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid477573462}{\list\listtemplateid1904874988{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\cf0\fbias0 \s1\fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\fbias0 \s2\fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\fbias0 \s3\fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0 \s4\fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\strike0\f39\fs20\ulnone\fbias0 \s5\fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \s6\fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \s7\fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \s8\fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af39\afs20 \ltrch\fcs0 \b0\i0\f39\fs20\fbias0 \s9\fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid752163927}{\list\listtemplateid285099256 +\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-308626962\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s42\fi-357\li1077\jclisttab\tx1080\lin1077 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689 +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;} +\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid1121073746}{\list\listtemplateid303218272\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid612407812 +\'01\u-3913 ?;}{\levelnumbers;}\f3\cf17\fbias0 \s26\fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 +\fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 +\fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1559511898}{\list\listtemplateid-743794326\listhybrid +{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid1229593488\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s41\fi-357\li1077\jclisttab\tx1080\lin1077 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;} +\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760 +\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 } +{\listname ;}\listid1567649130}{\list\listtemplateid-961874242\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-1175557160\'01\u-3913 ?;}{\levelnumbers;} +\f3\fbias0 \s27\fi-357\li1792\jclisttab\tx1795\lin1792 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440 +\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 } +{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1848404271}}{\*\listoverridetable{\listoverride\listid477573462\listoverridecount0\ls1}{\listoverride\listid1559511898\listoverridecount0\ls2} +{\listoverride\listid1848404271\listoverridecount0\ls3}{\listoverride\listid398796681\listoverridecount0\ls4}{\listoverride\listid752163927\listoverridecount0\ls5}{\listoverride\listid398796681\listoverridecount9{\lfolevel\listoverridestartat +\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel +\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}\ls6}{\listoverride\listid1567649130\listoverridecount0\ls7}{\listoverride\listid1559511898\listoverridecount0\ls8} +{\listoverride\listid1121073746\listoverridecount0\ls9}{\listoverride\listid752163927\listoverridecount0\ls10}}{\*\pgptbl {\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp7\itap0\li0\ri0\sb0\sa300}{\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp6\itap0\li0\ri0\sb0 +\sa0}{\pgp\ipgp2\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp1\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp4\itap0\li0\ri0\sb0\sa0}}{\*\rsidtbl \rsid340181\rsid874403\rsid1473980\rsid2177578\rsid2693076\rsid3699522\rsid4423363\rsid7214391\rsid8995160\rsid9441704\rsid12860942 +\rsid14566738\rsid14751308\rsid15014299\rsid15467703\rsid15686224\rsid15928942}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author kathan}{\operator Alok Shriram} +{\creatim\yr2013\mo4\dy8\hr10\min19}{\revtim\yr2013\mo4\dy8\hr10\min19}{\version2}{\edmins0}{\nofpages4}{\nofwords1341}{\nofchars7648}{\*\company Microsoft Corporation}{\nofcharsws8972}{\vern57427}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office +/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect +\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen +\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1440\dgvorigin1440\dghshow1\dgvshow1 +\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct +\asianbrkrule\rsidroot15686224\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0 +{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang +{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang +{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}} +\pard\plain \ltrpar\s28\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs28\alang1025 \ltrch\fcs0 +\b\fs28\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 MICROSOFT SOFTWARE LICENSE TERMS +\par }\pard\plain \ltrpar\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14566738 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224\charrsid7214391 \hich\af40\dbch\af13\loch\f40 MICROSOFT }{\rtlch\fcs1 \ab\af40\afs20 +\ltrch\fcs0 \b\fs20\dbch\af13\insrsid340181 \hich\af40\dbch\af13\loch\f40 Async for .NET Framework}{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid14566738 \hich\af40\dbch\af13\loch\f40 \hich\af40\dbch\af13\loch\f40 dll }{\rtlch\fcs1 +\ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid7214391\charrsid7214391 \hich\af40\dbch\af13\loch\f40 PACKAGE}{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224\charrsid7214391 \hich\af40\dbch\af13\loch\f40 }{\rtlch\fcs1 +\ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid14751308\charrsid7214391 +\par }\pard\plain \ltrpar\s29\ql \li0\ri0\sb120\sa120\nowidctlpar\brdrb\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs28\alang1025 \ltrch\fcs0 +\b\fs28\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\par }\pard\plain \ltrpar\s30\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the \hich\af40\dbch\af13\loch\f40 +software named above, which includes the media on which you received it, if any. The terms also apply to any Microsoft +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 updates, +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 supplements, +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 Internet-based services, and +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 support services +\par }\pard\plain \ltrpar\s30\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 +for this software, unless other terms accompany those items. If so, t\hich\af40\dbch\af13\loch\f40 hose terms apply. +\par }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE. +\par }\pard\plain \ltrpar\s35\ql \li0\ri0\sb120\sa120\nowidctlpar\brdrt\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\insrsid15686224 \hich\af40\dbch\af11\loch\f40 IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE PERPETUAL RIGHTS BELOW.}{ +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 1.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid14566738 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 INSTALLATION AND USE RIGHTS. }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14566738 \hich\af40\dbch\af13\loch\f40 You}{\rtlch\fcs1 +\ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14566738\charrsid15934954 \hich\af40\dbch\af13\loch\f40 may install and use any num\hich\af40\dbch\af13\loch\f40 ber of copies of the software on your devices to design, develop and test your programs +}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14566738 .}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224\charrsid14566738 \hich\af40\dbch\af13\loch\f40 2.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid15686224\charrsid14566738 \hich\af40\dbch\af13\loch\f40 DISTRIBUTABLE CODE. }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14566738 \hich\af40\dbch\af13\loch\f40 }{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid15686224\charrsid14566738 \hich\af40\dbch\af13\loch\f40 \hich\f40 The software is comprised of Distributable Code. \'93\loch\f40 \hich\f40 Distributable Code\'94\loch\f40 + is code that you are permitted to distribute in programs you develop if you \hich\af40\dbch\af13\loch\f40 comply with the terms below. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\fs20\loch\af39\hich\af39\dbch\af13\insrsid15686224 \hich\af39\dbch\af13\loch\f39 a.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 Right to Use and Distribute. +\par {\listtext\pard\plain\ltrpar \s42 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s42\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \f40\fs20\ul\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 +\ulnone\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 You may copy and distribute the object code form of the software. +\par {\listtext\pard\plain\ltrpar \s42 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 +Third Party Distribution}{\rtlch\fcs1 \af40 \ltrch\fcs0 \ulnone\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 . You may permit distributors of your programs to copy and distribute the Distributable Code as part of \hich\af40\dbch\af13\loch\f40 +those programs. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\fs20\loch\af39\hich\af39\dbch\af13\insrsid15686224 \hich\af39\dbch\af13\loch\f39 b.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 Distribution Requirements. For any Distributable Code you distribute, you must + +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s41\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \f40\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 +\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 add significant primary functionality to it in your programs; +\par {\*\atrfstart 353179605}{\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +for any Distributable Code having a filename extension of .lib, distribute only the results of runn\hich\af40\dbch\af13\loch\f40 ing such Distributable Code through a linker with your program; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +distribute Distributable Code included in a setup program only as part of that setup program without modification; }{\rtlch\fcs1 \af40\afs16 \ltrch\fcs0 \cs45\fs16\dbch\af11\insrsid3699522 {\*\atrfend 353179605}{\*\atnid kh}{\*\atnauthor kathan}\chatn +{\*\annotation{\*\atnref 353179605}{\*\atndate 655469385}\ltrpar \pard\plain \ltrpar\s46\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 +\fs20\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs16 \ltrch\fcs0 \cs45\fs16\insrsid3699522 \chatn }{\rtlch\fcs1 \af40 \ltrch\fcs0 \insrsid3699522 \hich\af40\dbch\af11\loch\f40 +Do these 2 apply to the .dlls? Standard terms which came in through the WinSDK\hich\af40\dbch\af11\loch\f40 \hich\f40 but were also deemed appropriate for VS so they ended up being \'93\loch\f40 \hich\f40 standard terms\'94\loch\f40 \hich\f40 + for SDK-type releases\'85.. +\par }{\rtlch\fcs1 \af40 \ltrch\fcs0 \insrsid4423363 +\par }{\rtlch\fcs1 \af40 \ltrch\fcs0 \insrsid1473980 \hich\af40\dbch\af11\loch\f40 Alok to review his team and get back to me.}}}{\rtlch\fcs1 \af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 require distributors and external end users to agree to terms that +\hich\af40\dbch\af13\loch\f40 protect it at least as much as this agreement; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 display your valid copyright notice on your programs; and +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +indemnify, defend, and hold harmless Microsoft from any claims, including attorneys\hich\f40 \rquote \loch\f40 fees, related to the distribution or use of your programs. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af39\afs20 \ltrch\fcs0 \b\fs20\loch\af39\hich\af39\dbch\af13\insrsid15686224 \hich\af39\dbch\af13\loch\f39 c.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 Distrib\hich\af40\dbch\af13\loch\f40 ution Restrictions. You may not +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s41\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs20\alang1025 \ltrch\fcs0 \f40\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40 \ltrch\fcs0 +\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 alter any copyright, trademark or patent notice in the Distributable Code; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 use Microsoft\hich\f40 \rquote \loch\f40 +s trademarks in your programs\hich\f40 \rquote \loch\f40 names or in a way that suggests your programs come from or are endorsed by Microsoft; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 distribute Distrib\hich\af40\dbch\af13\loch\f40 +utable Code to run on a platform other than the Windows platform; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +include Distributable Code in malicious, deceptive or unlawful programs; or +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Exclud\hich\af40\dbch\af13\loch\f40 ed License. An Excluded License is one that requires, as a condition of use, modification or distribution, that + +\par {\listtext\pard\plain\ltrpar \s26 \rtlch\fcs1 \af40\afs19 \ltrch\fcs0 \fs19\cf17\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s26\ql \fi-358\li1435\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls8\adjustright\rin0\lin1435\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af40 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 the code be disclosed or distributed in source code form; or +\par {\listtext\pard\plain\ltrpar \s27 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s27\ql \fi-357\li1792\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1795\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin1792\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 others have the right to modify it. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 3.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 SCOPE OF LICENSE.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 The software is licensed, not +\hich\af40\dbch\af13\loch\f40 + sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doin +\hich\af40\dbch\af13\loch\f40 g\hich\af40\dbch\af13\loch\f40 so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. You may not +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 work around any technical limitations in the software; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +reverse engineer, decompile or disassemble the software, except and only t\hich\af40\dbch\af13\loch\f40 o the extent that applicable law expressly permits, despite this limitation; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 publish the software for others to copy; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 rent, lease or le\hich\af40\dbch\af13\loch\f40 nd the software; + +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 transfer the software or this agreement to any third party; or + +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 use the software for commercial software hosting services. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 4.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 BACKUP COPY.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 + You may make one backup copy of the software. You may use it only to reinstall the software. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 5.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af40\dbch\af13\loch\f40 DOCUMENTATI\hich\af40\dbch\af13\loch\f40 ON.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 + Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 6.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af40\dbch\af13\loch\f40 EXPORT RESTRICTIONS.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 The software is subject to United States export laws and regulations. You must comply w +\hich\af40\dbch\af13\loch\f40 ith all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see }{\rtlch\fcs1 \ab0\af0\afs20 +\ltrch\fcs0 \cs36\b0\fs20\ul\cf2\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 www.microsoft.com/exporting}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 .}{\rtlch\fcs1 \ab0\af0\afs20 \ltrch\fcs0 +\cs36\b0\fs20\ul\cf2\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 7.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af40\dbch\af13\loch\f40 SUPPORT SERVICES. }{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 Because this \hich\af40\dbch\af13\loch\f40 \hich\f40 software is \'93\loch\f40 \hich\f40 as is,\'94 +\loch\f40 we may not provide support services for it. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 8.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af40\dbch\af13\loch\f40 ENTIRE AGREEMENT.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 + This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support serv\hich\af40\dbch\af13\loch\f40 ices. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 9.\tab}}\pard \ltrpar\s1\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin360\itap0\pararsid15686224 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 APPLICABLE LAW. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 a.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 United States.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 + If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws of the sta\hich\af40\dbch\af13\loch\f40 +te where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 b.\tab}}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af40\dbch\af13\loch\f40 Outside the United States.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 If you acquired the software in any other country, the laws of that country apply. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 10.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 LEGAL EFFE\hich\af40\dbch\af13\loch\f40 CT.}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 + This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws o +\hich\af40\dbch\af13\loch\f40 f your country if the laws of your country do not permit it to do so. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 11.\tab}}\pard \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 \hich\f40 +DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED \'93\loch\f40 \hich\f40 AS-IS.\'94\loch\f40 YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HAVE ADDITIONAL CONSUMER\hich\af40\dbch\af13\loch\f40 + RIGHTS OR STATUTORY GUARANTEES UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + +\par }\pard\plain \ltrpar\s24\ql \li357\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 FO\hich\af40\dbch\af13\loch\f40 R AUSTRALIA \hich\f40 \endash +\loch\f40 YOU HAVE STATUTORY GUARANTEES UNDER THE AUSTRALIAN CONSUMER LAW AND NOTHING IN THESE TERMS IS INTENDED TO AFFECT THOSE RIGHTS. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 12.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\insrsid15686224 .\hich\af40\dbch\af11\loch\f40 + YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. +\par }\pard\plain \ltrpar\s24\ql \li357\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 This limitation applies to +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 anything related to the\hich\af40\dbch\af13\loch\f40 software, services, content (including code) on third party Internet sites, or third party programs; and +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 +claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by appl\hich\af40\dbch\af13\loch\f40 icable law. +\par }\pard\plain \ltrpar\ql \li360\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid15686224 \rtlch\fcs1 \af40\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 +It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential +\hich\af40\dbch\af13\loch\f40 or other damages. +\par }\pard \ltrpar\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 {\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 +Please note: As this software is distributed in Quebec, Canada, some of the clauses in this agreement are provided below in French. +\par }{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299 +\par +\par }{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 Remarque : Ce logiciel \'e9\loch\f40 \hich\f40 tant distribu\'e9\loch\f40 \hich\f40 au Qu +\'e9\loch\f40 bec, Canada, certaines des clauses dans ce contrat sont fo\hich\af40\dbch\af13\loch\f40 \hich\f40 urnies ci-dessous en fran\'e7\loch\f40 ais. +\par \hich\af40\dbch\af13\loch\f40 \hich\f40 EXON\'c9\loch\f40 RATION DE GARANTIE.}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 Le logiciel vis\'e9 +\loch\f40 \hich\f40 par une licence est offert \'ab\loch\f40 \hich\f40 tel quel \'bb\loch\f40 \hich\f40 . Toute utilisation de ce logiciel est \'e0\loch\f40 \hich\f40 votre seule risque et p\'e9\loch\f40 ril. Microsoft n\hich\f40 \rquote \loch\f40 +\hich\f40 accorde aucune autre garantie expresse. Vous pouvez b\'e9\loch\f40 \hich\f40 n\'e9\loch\f40 ficier\hich\af40\dbch\af13\loch\f40 \hich\f40 + de droits additionnels en vertu du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualit\'e9\loch\f40 marchande, d\hich\f40 \rquote \loch\f40 +\hich\f40 ad\'e9\loch\f40 \hich\f40 quation \'e0\loch\f40 un usage particulier et d\hich\f40 \rquote \loch\f40 ab\hich\af40\dbch\af13\loch\f40 s\hich\af40\dbch\af13\loch\f40 \hich\f40 ence de contrefa\'e7\loch\f40 on sont exclues. +\par }{\rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 LIMITATION DES DOMMAGES-INT\'c9\loch\f40 \hich\f40 R\'ca\loch\f40 \hich\f40 +TS ET EXCLUSION DE RESPONSABILIT\'c9\loch\f40 POUR LES DOMMAGES.}{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 + Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement \'e0\loch\f40 hauteur de 5,00 $ US. Vou\hich\af40\dbch\af13\loch\f40 \hich\f40 s ne pouvez pr\'e9\loch\f40 \hich\f40 tendre \'e0\loch\f40 +\hich\f40 aucune indemnisation pour les autres dommages, y compris les dommages sp\'e9\loch\f40 \hich\f40 ciaux, indirects ou accessoires et pertes de b\'e9\loch\f40 \hich\f40 n\'e9\loch\f40 fices. +\par }{\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 Cette limitation concerne : +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\loch\af3\hich\af3\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard \ltrpar +\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0\pararsid15014299 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 +\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 tout ce qui est reli\'e9\loch\f40 au logiciel, aux services ou au contenu (y compris le\hich\af40\dbch\af13\loch\f40 + code) figurant sur des sites Internet tiers ou dans des programmes tiers ; et +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\loch\af3\hich\af3\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af40\dbch\af13\loch\f40 \hich\f40 les r\'e9 +\loch\f40 \hich\f40 clamations au titre de violation de contrat ou de garantie, ou au titre de responsabilit\'e9\loch\f40 \hich\f40 stricte, de n\'e9\loch\f40 gligence ou d\hich\f40 \rquote \loch\f40 \hich\f40 une autre faute dans la limite autoris\'e9 +\loch\f40 e par la loi e\hich\af40\dbch\af13\loch\f40 n vigueur. +\par }\pard \ltrpar\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 +\hich\af40\dbch\af13\loch\f40 Elle s\hich\f40 \rquote \loch\f40 \hich\f40 applique \'e9\loch\f40 \hich\f40 galement, m\'ea\loch\f40 \hich\f40 me si Microsoft connaissait ou devrait conna\'ee\loch\f40 tre l\hich\f40 \rquote \'e9\loch\f40 \hich\f40 +ventualit\'e9\loch\f40 d\hich\f40 \rquote \loch\f40 un tel dommage. Si votre pays n\hich\f40 \rquote \loch\f40 autorise pas l\hich\f40 \rquote \loch\f40 \hich\f40 exclusion ou la limitation de responsabilit\'e9\loch\f40 + pour les dommages indirects, accessoires ou de quelque natu\hich\af40\dbch\af13\loch\f40 re que ce soit, il se peut que la limitation ou l\hich\f40 \rquote \loch\f40 exclusion ci-dessus ne s\hich\f40 \rquote \loch\f40 \hich\f40 appliquera pas \'e0 +\loch\f40 \hich\f40 votre \'e9\loch\f40 gard. +\par }\pard\plain \ltrpar\s37\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 \rtlch\fcs1 \ab\af40\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af40\hich\af40\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af40\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 EFFET JURIDIQUE.}{ +\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af40\dbch\af13\loch\f40 \hich\f40 Le pr\'e9\loch\f40 \hich\f40 sent contrat d\'e9\loch\f40 +crit certains droits juridiques. Vous pourriez avoir d\hich\f40 \rquote \loch\f40 \hich\f40 autres droits pr\'e9\loch\f40 \hich\f40 vus par les lois de votre pays. Le pr\'e9\loch\f40 sen\hich\af40\dbch\af13\loch\f40 \hich\f40 +t contrat ne modifie pas les droits que vous conf\'e8\loch\f40 rent les lois de votre pays si celles-ci ne le permettent pas}{\rtlch\fcs1 \ab0\af40\afs20 \ltrch\fcs0 \b0\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299 .}{\rtlch\fcs1 \af40 +\ltrch\fcs0 \insrsid4000782 +\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a +9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad +5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 +b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 +0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 +a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f +c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 +0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 +a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 +6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b +4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b +4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210030dd4329a8060000a41b0000160000007468656d652f7468656d652f +7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87 +615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad +79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b +5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab +999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9 +699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586 +8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6 +0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f +9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be +15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979 +3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d +32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a +f074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86 +e877f0034e16bafb0e258ebb4faf06b769e888340b103d331115bebc4eb813bf83291b63624a0d1475a756c734f9bbc2cd28546ecbe1e20a3794ca175f3fae90 +fb6d2dd99bb07b55e5ccf68942bd0877b23c77b908e8db5f9db7f024d9239010f35bd4bbe2fcae387bfff9e2bc289f2fbe24cfaa301468dd8bd846dbb4ddf1c2 +ae7b4c191ba8292337a469bc25ec3d411f06f53a73e224c5292c8de0516732307070a1c0660d125c7d44553488700a4d7bddd3444299910e254ab984c3a219ae +a4adf1d0f82b7bd46cea4388ad1c12ab5d1ed8e1153d9c9f350a3246aad01c6873462b9ac05999ad5cc988826eafc3acae853a33b7ba11cd1445875ba1b236b1 +399483c90bd560b0b0263435085a21b0f22a9cf9356b38ec6046026d77eba3dc2dc60b17e92219e180643ed27acffba86e9c94c7ca9c225a0f1b0cfae0788ad5 +4adc5a9aec1b703b8b93caec1a0bd8e5de7b132fe5113cf312503b998e2c2927274bd051db6b35979b1ef271daf6c6704e86c73805af4bdd476216c26593af84 +0dfb5393d964f9cc9bad5c313709ea70f561ed3ea7b053075221d51696910d0d339585004b34272bff7213cc7a510a5454a3b349b1b206c1f0af490176745d4b +c663e2abb2b34b23da76f6352ba57ca2881844c1111ab189d8c7e07e1daaa04f40255c77988aa05fe06e4e5bdb4cb9c5394bbaf28d98c1d971ccd20867e556a7 +689ec9166e0a522183792b8907ba55ca6e943bbf2a26e52f48957218ffcf54d1fb09dc3eac04da033e5c0d0b8c74a6b43d2e54c4a10aa511f5fb021a07533b20 +5ae07e17a621a8e082dafc17e450ffb739676998b48643a4daa7211214f623150942f6a02c99e83b85583ddbbb2c4996113211551257a656ec1139246ca86be0 +aadedb3d1441a89b6a929501833b197fee7b9641a3503739e57c732a59b1f7da1cf8a73b1f9bcca0945b874d4393dbbf10b1680f66bbaa5d6f96e77b6f59113d +316bb31a795600b3d256d0cad2fe354538e7566b2bd69cc6cbcd5c38f0e2bcc63058344429dc2121fd07f63f2a7c66bf76e80d75c8f7a1b622f878a18941d840 +545fb28d07d205d20e8ea071b283369834296bdaac75d256cb37eb0bee740bbe278cad253b8bbfcf69eca23973d939b97891c6ce2cecd8da8e2d343578f6648a +c2d0383fc818c798cf64e52f597c740f1cbd05df0c264c49134cf09d4a60e8a107260f20f92d47b374e32f000000ffff0300504b030414000600080000002100 +0dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f7 +8277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89 +d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd500 +1996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0f +bfff0000001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6 +a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a +0000001c00000000000000000000000000190200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021 +0030dd4329a8060000a41b00001600000000000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d001400060008 +00000021000dd1909fb60000001b0100002700000000000000000000000000b20900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000ad0a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax371\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdlocked0 heading 1; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 2;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 3;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 4; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 5;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 6;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 7; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 8;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 6; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 9;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote text; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 header;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footer;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index heading; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of figures;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope address; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope return;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 line number; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 page number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of authorities; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 macro;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 toa heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Closing;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Signature; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 5; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Message Header;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Note Heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Block Text; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 FollowedHyperlink;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Document Map;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Plain Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 E-mail Signature;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Top of Form; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal (Web);\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Acronym;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Address; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Cite;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Code;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Definition;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Keyboard; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Sample;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Typewriter;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Table;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Simple 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Classic 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Colorful 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Columns 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 7; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Grid 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 6;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 7; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table List 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table 3D effects 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Contemporary;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Elegant;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Professional;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Subtle 1; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Subtle 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Web 3; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority59 \lsdlocked0 Table Grid;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Table Theme;\lsdsemihidden1 \lsdlocked0 Placeholder Text;\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; +\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid;\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdpriority65 \lsdlocked0 Medium List 1; +\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List;\lsdpriority71 \lsdlocked0 Colorful Shading; +\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdpriority62 \lsdlocked0 Light Grid Accent 1; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdsemihidden1 \lsdlocked0 Revision;\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph; +\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; +\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1; +\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2; +\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; +\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdpriority60 \lsdlocked0 Light Shading Accent 3; +\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3; +\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdpriority70 \lsdlocked0 Dark List Accent 3; +\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdpriority61 \lsdlocked0 Light List Accent 4; +\lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; +\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdpriority62 \lsdlocked0 Light Grid Accent 5; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5; +\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6; +\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; +\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0 Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0 Plain Table 4; +\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0 Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0 Grid Table 4; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 1; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2; +\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4; +\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 4; +\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6; +\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List Table 3 Accent 1; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent 2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3; +\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 3; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4; +\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4; +\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2 Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent 6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 6;}}{\*\datastore 010500000200000018000000 +4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e500000000000000000000000050b2 +ef407d34ce01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/Microsoft.Bcl.Async.1.0.16.nupkg b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/Microsoft.Bcl.Async.1.0.16.nupkg new file mode 100644 index 0000000..fffb5a3 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/Microsoft.Bcl.Async.1.0.16.nupkg differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/Microsoft.Bcl.Async.1.0.16.nuspec b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/Microsoft.Bcl.Async.1.0.16.nuspec new file mode 100644 index 0000000..18d2666 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/Microsoft.Bcl.Async.1.0.16.nuspec @@ -0,0 +1,33 @@ + + + + Microsoft.Bcl.Async + 1.0.16 + Async for .NET Framework 4, Silverlight 4 and 5, and Windows Phone 7.5 and 8 + Microsoft + Microsoft + http://go.microsoft.com/fwlink/?LinkID=296434 + http://go.microsoft.com/fwlink/?LinkID=280056 + http://go.microsoft.com/fwlink/?LinkID=288859 + true + This package enables Visual Studio 2012 projects targeting .NET Framework 4 (with KB2468871), Silverlight 4 and 5, and Windows Phone 7.5 (including any portable library combinations) to use the new 'async' and 'await' keywords. This package also includes Task-based extension methods that allow using some of the existing asynchronous APIs with the new language keywords. Windows Phone 8 projects can use this package to get access to async extension methods for the networking types. + +This package is not supported in Visual Studio 2010, and is only required for projects targeting .NET Framework 4.5 or .NET for Windows Store apps when consuming a library that uses this package. For known issues, please see: http://blogs.msdn.com/b/bclteam/p/asynctargetingpackkb.aspx. + Enables usage of the 'async' and 'await' keywords from projects targeting .NET Framework 4 (with KB2468871), Silverlight 4 and 5, and Windows Phone 7.5 and 8. + Copyright © Microsoft Corporation + BCL Microsoft System Async Await Asynchronous + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/ReleaseNotes.txt b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/ReleaseNotes.txt new file mode 100644 index 0000000..6099fc6 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/ReleaseNotes.txt @@ -0,0 +1,18 @@ +Changes in 1.0.14-rc +- Changed: Moved to latest Microsoft.Bcl package (1.0.16-rc). + +Changes in 1.0.13-beta +- Fixed: ConfigureAwait(false) still continue on captured context when using Async Targeting Pack (http://connect.microsoft.com/VisualStudio/feedback/details/767008/configureawait-false-still-continue-on-captured-context-when-using-async-targeting-pack) +- Fixed: Silverlight 4 projects now get Microsoft.Threading.Tasks.Extensions.Silverlight +- Added: Package now references System.Net.dll automatically for .NET 4.0 projects so that networking extension methods work out of the box. +- Changed: Moved types in Microsoft.Threading.Tasks from System.* to Microsoft.* namespace to prevent name conflicts +- Changed: Package now includes Microsoft.Threading.Tasks for .NET 4.5, Windows Store apps and Windows Phone 8 projects to enable the consumption of custom awaiters. +- Changed: Microsoft.Bcl dependency is now not included for .NET 4.5, Windows Store apps and Windows Phone 8 projects because it is not needed. + +Changes in 1.0.12-beta + +- Fixed: TypeLoadException when using Async for WP7.5 version 1.0.11-beta (https://connect.microsoft.com/VisualStudio/feedback/details/768521/system-typeloadexception-when-using-async-for-wp7-5-version-1-0-11-beta) + +Changes in 1.0.11-beta + +- Initial release \ No newline at end of file diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.Desktop.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.Desktop.dll new file mode 100644 index 0000000..fe18d03 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.Desktop.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.Desktop.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.Desktop.xml new file mode 100644 index 0000000..6fad7c9 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.Desktop.xml @@ -0,0 +1,684 @@ + + + + Microsoft.Threading.Tasks.Extensions.Desktop + + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + + Provides asynchronous wrappers for .NET Framework operations. + + + Provides asynchronous wrappers for .NET Framework operations. + + + + Downloads the resource with the specified URI as a string, asynchronously. + The WebClient. + The URI from which to download data. + A Task that contains the downloaded string. + + + Downloads the resource with the specified URI as a string, asynchronously. + The WebClient. + The URI from which to download data. + A Task that contains the downloaded string. + + + Opens a readable stream for the data downloaded from a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a readable stream for the data downloaded from a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + The HTTP method that should be used to open the stream. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + The HTTP method that should be used to open the stream. + A Task that contains the opened stream. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The HTTP method that should be used to upload the data. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The HTTP method that should be used to upload the data. + The data to upload. + A Task containing the data in the response from the upload. + + + Converts a path to a Uri using the WebClient's logic. + Based on WebClient's private GetUri method. + + + Converts a path to a Uri using the WebClient's logic. + Based on WebClient's private GetUri method. + + + Downloads the resource with the specified URI as a byte array, asynchronously. + The WebClient. + The URI from which to download data. + A Task that contains the downloaded data. + + + Downloads the resource with the specified URI as a byte array, asynchronously. + The WebClient. + The URI from which to download data. + A Task that contains the downloaded data. + + + Downloads the resource with the specified URI to a local file, asynchronously. + The WebClient. + The URI from which to download data. + The name of the local file that is to receive the data. + A Task that contains the downloaded data. + + + Downloads the resource with the specified URI to a local file, asynchronously. + The WebClient. + The URI from which to download data. + The name of the local file that is to receive the data. + A Task that contains the downloaded data. + + + Uploads data to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The HTTP method that should be used to upload the data. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The HTTP method that should be used to upload the data. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads a file to the specified resource, asynchronously. + The WebClient. + The URI to which the file should be uploaded. + A path to the file to upload. + A Task containing the data in the response from the upload. + + + Uploads a file to the specified resource, asynchronously. + The WebClient. + The URI to which the file should be uploaded. + A path to the file to upload. + A Task containing the data in the response from the upload. + + + Uploads a file to the specified resource, asynchronously. + The WebClient. + The URI to which the file should be uploaded. + The HTTP method that should be used to upload the file. + A path to the file to upload. + A Task containing the data in the response from the upload. + + + Uploads a file to the specified resource, asynchronously. + The WebClient. + The URI to which the file should be uploaded. + The HTTP method that should be used to upload the file. + A path to the file to upload. + A Task containing the data in the response from the upload. + + + Causes an online announcement (Hello) message to be sent asynchronously with the specified endpoint discovery metadata and user-defined state. The specified is called when the operation completes. + Task instance. + The endpoint discovery metadata. + The source. + + + Causes an offline announcement (Bye) message to be sent asynchronously with the specified endpoint discovery metadata and user-defined state. The specified is called when the operation completes. + Task instance. + The endpoint discovery metadata. + The source. + + + Begins asynchronously retrieving an incoming request. + Task object that indicates the status of the asynchronous operation. + A Win32 function call failed. Check the exception's property to determine the cause of the exception. + This object has not been started or is currently stopped. + This object is closed. + The source. + + + Starts an asynchronous request for the client's X.509 v.3 certificate. + Task that indicates the status of the operation. + The source. + + + Called by clients to begin an asynchronous operation to authenticate the client, and optionally the server, in a client-server connection. This method does not block. + Task object indicating the status of the asynchronous operation. + The authentication failed. You can use this object to retry the authentication. + The authentication failed. You can use this object to retry the authentication. + This object has been closed. + Authentication has already occurred.- or -This stream was used previously to attempt authentication as the server. You cannot use the stream to retry authentication as the client. + The source. + + + Called by clients to begin an asynchronous operation to authenticate the client, and optionally the server, in a client-server connection. The authentication process uses the specified credentials. This method does not block. + Task object indicating the status of the asynchronous operation. + The that is used to establish the identity of the client. + The Service Principal Name (SPN) that uniquely identifies the server to authenticate. + is null.- or - is null. + The authentication failed. You can use this object to retry the authentication. + The authentication failed. You can use this object to retry the authentication. + This object has been closed. + Authentication has already occurred.- or -This stream was used previously to attempt authentication as the server. You cannot use the stream to retry authentication as the client. + The source. + + + Called by clients to begin an asynchronous operation to authenticate the client, and optionally the server, in a client-server connection. The authentication process uses the specified credentials and channel binding. This method does not block. + Task object indicating the status of the asynchronous operation. + The that is used to establish the identity of the client. + The that is used for extended protection. + The Service Principal Name (SPN) that uniquely identifies the server to authenticate. + is null.- or - is null. + The authentication failed. You can use this object to retry the authentication. + The authentication failed. You can use this object to retry the authentication. + Authentication has already occurred.- or -This stream was used previously to attempt authentication as the server. You cannot use the stream to retry authentication as the client. + This object has been closed. + The source. + + + Called by servers to begin an asynchronous operation to authenticate the client, and optionally the server, in a client-server connection. This method does not block. + Task object indicating the status of the asynchronous operation. + The authentication failed. You can use this object to retry the authentication. + The authentication failed. You can use this object to retry the authentication. + This object has been closed. + Windows 95 and Windows 98 are not supported. + The source. + + + Called by servers to begin an asynchronous operation to authenticate the client, and optionally the server, in a client-server connection. The authentication process uses the specified extended protection policy. This method does not block. + Task object indicating the status of the asynchronous operation. + The that is used for extended protection. + The and on the extended protection policy passed in the parameter are both null. + The authentication failed. You can use this object to retry the authentication. + The authentication failed. You can use this object to retry the authentication. + Windows 95 and Windows 98 are not supported. + This object has been closed. + The source. + + + Called by servers to begin an asynchronous operation to authenticate the client, and optionally the server, in a client-server connection. The authentication process uses the specified server credentials and authentication options. This method does not block. + Task object indicating the status of the asynchronous operation. + The that is used to establish the identity of the client. + One of the values, indicating the security services for the stream. + One of the values, indicating how the server can use the client's credentials to access resources. + is null. + must be , , or , + The authentication failed. You can use this object to retry the authentication. + The authentication failed. You can use this object to retry the authentication. + This object has been closed. + Authentication has already occurred.- or -This stream was used previously to attempt authentication as the client. You cannot use the stream to retry authentication as the server. + Windows 95 and Windows 98 are not supported. + The source. + + + Called by clients to begin an asynchronous operation to authenticate the server and optionally the client. + Task object that indicates the status of the asynchronous operation. + The name of the server that shares this . + is null. + The authentication failed and left this object in an unusable state. + Authentication has already occurred.-or-Server authentication using this was tried previously.-or- Authentication is already in progress. + This object has been closed. + The source. + + + Called by servers to begin an asynchronous operation to authenticate the client and optionally the server in a client-server connection. + Task object indicating the status of the asynchronous operation. + The X509Certificate used to authenticate the server. + is null. + The authentication failed and left this object in an unusable state. + Authentication has already occurred.-or-Client authentication using this was tried previously.-or- Authentication is already in progress. + This object has been closed. + The method is not supported on Windows 95, Windows 98, or Windows Millennium. + The source. + + + Starts an asynchronous request for a remote host connection. The host is specified by a host name and a port number. + Task that represents the asynchronous connection. + The name of the remote host. + The port number of the remote host. + is null. + The has been closed. + This method is valid for sockets in the or families. + The port number is not valid. + The is ing. + + The source. + + + Starts an asynchronous request for a remote host connection. The host is specified by an and a port number. + Task that represents the asynchronous connection. + The of the remote host. + The port number of the remote host. + is null. + An error occurred when attempting to access the socket. See the Remarks section for more information. + The has been closed. + The is not in the socket family. + The port number is not valid. + The length of is zero. + The is ing. + + The source. + + + Starts an asynchronous request for a remote host connection. The host is specified by an array and a port number. + Task that represents the asynchronous connections. + At least one , designating the remote host. + The port number of the remote host. + is null. + An error occurred when attempting to access the socket. See the Remarks section for more information. + The has been closed. + This method is valid for sockets that use or . + The port number is not valid. + The length of is zero. + The is ing. + + The source. + + + Starts an asynchronous operation to accept an incoming connection attempt. + Task that represents the asynchronous creation of the . + An error occurred while attempting to access the socket. See the Remarks section for more information. + The has been closed. + + The source. + + + Starts an asynchronous operation to accept an incoming connection attempt. + Task that represents the asynchronous creation of the . + An error occurred while attempting to access the socket. See the Remarks section for more information. + The has been closed. + + The source. + + + Sends a datagram to a destination asynchronously. The destination is specified by a . + Task object that represents the asynchronous send. + A array that contains the data to be sent. + The number of bytes to send. + The that represents the destination for the data. + The source. + + + Sends a datagram to a remote host asynchronously. The destination was specified previously by a call to . + Task object that represents the asynchronous send. + A array that contains the data to be sent. + The number of bytes to send. + The source. + + + Sends a datagram to a remote host asynchronously. The destination was specified previously by a call to . + Task object that represents the asynchronous send. + A array that contains the data to be sent. + The number of bytes to send. + The host name. + The host name. + The source. + + + Starts an asynchronous request to retrieve the stable unicast IP address table on the local computer. + Task that represents the asynchronous request. + This method is not implemented on the platform. This method uses the native NotifyStableUnicastIpAddressTable function that is supported on Windows Vista and later. + The call to the native NotifyStableUnicastIpAddressTable function failed. + The source. + + + Opens the connection asynchronously. + The source. + Task that represents the asynchronous request. + + + Opens the connection asynchronously. + The source. + The cancellation token. + Task that represents the asynchronous request. + + + Initiates the asynchronous execution of the Transact-SQL statement or stored procedure that is described by this , given a callback procedure and state information. + Task that can be used to poll or wait for results, or both; this value is also needed when invoking , which returns the number of affected rows. + Any error that occurred while executing the command text. + The name/value pair "Asynchronous Processing=true" was not included within the connection string defining the connection for this . + 2 + The source. + + + Initiates the asynchronous execution of the Transact-SQL statement or stored procedure that is described by this , given a callback procedure and state information. + Task that can be used to poll or wait for results, or both; this value is also needed when invoking , which returns the number of affected rows. + Any error that occurred while executing the command text. + The name/value pair "Asynchronous Processing=true" was not included within the connection string defining the connection for this . + 2 + The cancellation token. + The source. + + + Initiates the asynchronous execution of the Transact-SQL statement or stored procedure that is described by this and returns results as an object, using a callback procedure. + Task that can be used to poll, wait for results, or both; this value is also needed when the is called, which returns the results of the command as XML. + Any error that occurred while executing the command text. + The name/value pair "Asynchronous Processing=true" was not included within the connection string defining the connection for this . + 2 + The source. + + + Initiates the asynchronous execution of the Transact-SQL statement or stored procedure that is described by this and returns results as an object, using a callback procedure. + Task that can be used to poll, wait for results, or both; this value is also needed when the is called, which returns the results of the command as XML. + Any error that occurred while executing the command text. + The name/value pair "Asynchronous Processing=true" was not included within the connection string defining the connection for this . + 2 + The cancellation token. + The source. + + + Initiates the asynchronous execution of the Transact-SQL statement or stored procedure that is described by this and retrieves one or more result sets from the server, given a callback procedure and state information. + Task that can be used to poll, wait for results, or both; this value is also needed when invoking , which returns a instance which can be used to retrieve the returned rows. + Any error that occurred while executing the command text. + The name/value pair "Asynchronous Processing=true" was not included within the connection string defining the connection for this . + 2 + The source. + + + Initiates the asynchronous execution of the Transact-SQL statement or stored procedure that is described by this and retrieves one or more result sets from the server, given a callback procedure and state information. + Task that can be used to poll, wait for results, or both; this value is also needed when invoking , which returns a instance which can be used to retrieve the returned rows. + Any error that occurred while executing the command text. + The name/value pair "Asynchronous Processing=true" was not included within the connection string defining the connection for this . + 2 + The cancellation token. + The source. + + + Starts an asynchronous method call that returns a . + The metadata. + The source. + + + Starts an asynchronous method call that returns a using the specified address, callback, asynchronous state, and download mechanism. + The metadata obtained from the specified . + The address of the metadata. + The value to use when downloading the metadata. + The source. + + + Starts an asynchronous method call that returns a using the specified address, callback, and asynchronous state. + The metadata obtained from the specified . + The address of the metadata. + The source. + + + + Begins an asynchronous find operation with the specified criteria. + + The discovery client. + The criteria for finding services. + A Task that represents the asynchronous operation. + + + + Begins an asynchronous resolve operation with the specified criteria. + + The discovery client. + The criteria for matching a service endpoint. + A Task that represents the asynchronous operation. + + + + Asynchronously attempts to send an Internet Control Message Protocol (ICMP) echo message. + + The Ping. + An IPAddress that identifies the computer that is the destination for the ICMP echo message. + A task that represents the asynchronous operation. + + + + Asynchronously attempts to send an Internet Control Message Protocol (ICMP) echo message. + + The Ping. + + A String that identifies the computer that is the destination for the ICMP echo message. + The value specified for this parameter can be a host name or a string representation of an IP address. + + A task that represents the asynchronous operation. + + + + Asynchronously attempts to send an Internet Control Message Protocol (ICMP) echo message. + + The Ping. + An IPAddress that identifies the computer that is the destination for the ICMP echo message. + + An Int32 value that specifies the maximum number of milliseconds (after sending the echo message) + to wait for the ICMP echo reply message. + + A task that represents the asynchronous operation. + + + + Asynchronously attempts to send an Internet Control Message Protocol (ICMP) echo message. + + The Ping. + + A String that identifies the computer that is the destination for the ICMP echo message. + The value specified for this parameter can be a host name or a string representation of an IP address. + + + An Int32 value that specifies the maximum number of milliseconds (after sending the echo message) + to wait for the ICMP echo reply message. + + A task that represents the asynchronous operation. + + + + Asynchronously attempts to send an Internet Control Message Protocol (ICMP) echo message. + + The Ping. + An IPAddress that identifies the computer that is the destination for the ICMP echo message. + + An Int32 value that specifies the maximum number of milliseconds (after sending the echo message) + to wait for the ICMP echo reply message. + + + A Byte array that contains data to be sent with the ICMP echo message and returned + in the ICMP echo reply message. The array cannot contain more than 65,500 bytes. + + A task that represents the asynchronous operation. + + + + Asynchronously attempts to send an Internet Control Message Protocol (ICMP) echo message. + + The Ping. + + A String that identifies the computer that is the destination for the ICMP echo message. + The value specified for this parameter can be a host name or a string representation of an IP address. + + + An Int32 value that specifies the maximum number of milliseconds (after sending the echo message) + to wait for the ICMP echo reply message. + + + A Byte array that contains data to be sent with the ICMP echo message and returned + in the ICMP echo reply message. The array cannot contain more than 65,500 bytes. + + A task that represents the asynchronous operation. + + + + Asynchronously attempts to send an Internet Control Message Protocol (ICMP) echo message. + + The Ping. + An IPAddress that identifies the computer that is the destination for the ICMP echo message. + + An Int32 value that specifies the maximum number of milliseconds (after sending the echo message) + to wait for the ICMP echo reply message. + + + A Byte array that contains data to be sent with the ICMP echo message and returned + in the ICMP echo reply message. The array cannot contain more than 65,500 bytes. + + A PingOptions object used to control fragmentation and Time-to-Live values for the ICMP echo message packet. + A task that represents the asynchronous operation. + + + + Asynchronously attempts to send an Internet Control Message Protocol (ICMP) echo message. + + The Ping. + + A String that identifies the computer that is the destination for the ICMP echo message. + The value specified for this parameter can be a host name or a string representation of an IP address. + + + An Int32 value that specifies the maximum number of milliseconds (after sending the echo message) + to wait for the ICMP echo reply message. + + + A Byte array that contains data to be sent with the ICMP echo message and returned + in the ICMP echo reply message. The array cannot contain more than 65,500 bytes. + + A PingOptions object used to control fragmentation and Time-to-Live values for the ICMP echo message packet. + A task that represents the asynchronous operation. + + + The core implementation of SendTaskAsync. + The Ping. + A user-defined object stored in the resulting Task. + + A delegate that initiates the asynchronous send. + The provided TaskCompletionSource must be passed as the user-supplied state to the actual Ping.SendAsync method. + + + + + Sends an e-mail message asynchronously. + The client. + A String that contains the address information of the message sender. + A String that contains the address that the message is sent to. + A String that contains the subject line for the message. + A String that contains the message body. + A Task that represents the asynchronous send. + + + Sends an e-mail message asynchronously. + The client. + A MailMessage that contains the message to send. + A Task that represents the asynchronous send. + + + The core implementation of SendTaskAsync. + The client. + The user-supplied state. + + A delegate that initiates the asynchronous send. + The provided TaskCompletionSource must be passed as the user-supplied state to the actual SmtpClient.SendAsync method. + + + + + Provides asynchronous wrappers for the class. + + + Asynchronously returns the Internet Protocol (IP) addresses for the specified host. + The host name or IP address to resolve. + An array of type System.Net.IPAddress that holds the IP addresses for the host specified. + + + Asynchronously resolves an IP address to an System.Net.IPHostEntry instance. + The IP address to resolve. + An System.Net.IPHostEntry instance that contains address information about the host. + + + Asynchronously resolves an IP address to an System.Net.IPHostEntry instance. + The host name or IP address to resolve. + An System.Net.IPHostEntry instance that contains address information about the host. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.dll new file mode 100644 index 0000000..e911377 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.xml new file mode 100644 index 0000000..af646a2 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.Extensions.xml @@ -0,0 +1,275 @@ + + + + Microsoft.Threading.Tasks.Extensions + + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + + Provides asynchronous wrappers for .NET Framework operations. + + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The cancellation token. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + The cancellation token. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads a maximum of count characters from the reader asynchronously and writes + the data to buffer, beginning at index. + + + When the operation completes, contains the specified character array with the + values between index and (index + count - 1) replaced by the characters read + from the current source. + + + The maximum number of characters to read. If the end of the stream is reached + before count of characters is read into buffer, the current method returns. + + The place in buffer at which to begin writing. + the source reader. + A Task that represents the asynchronous operation. + + + + Reads asynchronously a maximum of count characters from the current stream, and writes the + data to buffer, beginning at index. + + The source reader. + + When this method returns, this parameter contains the specified character + array with the values between index and (index + count -1) replaced by the + characters read from the current source. + + The position in buffer at which to begin writing. + The maximum number of characters to read. + A Task that represents the asynchronous operation. + + + + Reads a line of characters from the reader and returns the string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + + Reads all characters from the current position to the end of the TextReader + and returns them as one string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + Writes a string asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + Writes a line terminator asynchronously to a text stream. + The writer. + A Task representing the asynchronous write. + + + Writes a string followed by a line terminator asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char followed by a line terminator asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + + Clears all buffers for the current writer and causes any buffered data to + be written to the underlying device. + + The writer. + A Task representing the asynchronous flush. + + + Starts an asynchronous request for a web resource. + Task that represents the asynchronous request. + The stream is already in use by a previous call to . + + The source. + + + Starts an asynchronous request for a object to use to write data. + Task that represents the asynchronous request. + The property is GET and the application writes to the stream. + The stream is being used by a previous call to . + No write stream is available. + + The source. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.dll new file mode 100644 index 0000000..065d746 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.xml new file mode 100644 index 0000000..5c22030 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net40/Microsoft.Threading.Tasks.xml @@ -0,0 +1,630 @@ + + + + Microsoft.Threading.Tasks + + + + + Provides extension methods for threading-related types. + + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time in milliseconds for the source to be canceled. + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time for the source to be canceled. + + + Gets an awaiter used to await this . + The task to await. + An awaiter instance. + + + Gets an awaiter used to await this . + Specifies the type of data returned by the task. + The task to await. + An awaiter instance. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Event handler for progress reports. + Specifies the type of data for the progress report. + The sender of the report. + The reported value. + + + + Provides an IProgress{T} that invokes callbacks for each reported progress value. + + Specifies the type of the progress report value. + + Any handler provided to the constructor or event handlers registered with + the event are invoked through a + instance captured + when the instance is constructed. If there is no current SynchronizationContext + at the time of construction, the callbacks will be invoked on the ThreadPool. + + + + The synchronization context captured upon construction. This will never be null. + + + The handler specified to the constructor. This may be null. + + + A cached delegate used to post invocation to the synchronization context. + + + Initializes the . + + + Initializes the with the specified callback. + + A handler to invoke for each reported progress value. This handler will be invoked + in addition to any delegates registered with the event. + + The is null (Nothing in Visual Basic). + + + Reports a progress change. + The value of the updated progress. + + + Reports a progress change. + The value of the updated progress. + + + Invokes the action and event callbacks. + The progress value. + + + Raised for each reported progress value. + + Handlers registered with this event will be invoked on the + captured when the instance was constructed. + + + + Holds static values for . + This avoids one static instance per type T. + + + A default synchronization context that targets the ThreadPool. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The to await. + + true to attempt to marshal the continuation back to the original context captured + when BeginAwait is called; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The underlying awaitable on whose logic this awaitable relies. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The default value to use for continueOnCapturedContext. + + + Error message for GetAwaiter. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + + Fast checks for the end of an await operation to determine whether more needs to be done + prior to completing the await. + + The awaited task. + + + Handles validations on tasks that aren't successfully completed. + The awaited task. + + + Throws an exception to handle a task that completed in a state other than RanToCompletion. + + + Schedules the continuation onto the associated with this . + The awaited task. + The action to invoke when the await operation completes. + Whether to capture and marshal back to the current context. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Invokes the delegate in a try/catch that will propagate the exception asynchronously on the ThreadPool. + + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Whether the current thread is appropriate for inlining the await continuation. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable context for switching into a target environment. + This type is intended for compiler use only. + + + Gets an awaiter for this . + An awaiter for this awaitable. + This method is intended for compiler user rather than use directly in code. + + + Provides an awaiter that switches into a target environment. + This type is intended for compiler use only. + + + A completed task. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Ends the await operation. + + + Gets whether a yield is not required. + This property is intended for compiler user rather than use directly in code. + + + Provides methods for creating and manipulating tasks. + + + Creates a task that runs the specified action. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified action. + The action to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the function. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + An already completed task. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + + A callback invoked when all of the tasks complete successfully in the RanToCompletion state. + This callback is responsible for storing the results into the TaskCompletionSource. + + A Task that represents the completion of all of the provided tasks. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates an already completed from the specified result. + The result from which to create the completed task. + The completed task. + + + Creates an awaitable that asynchronously yields back to the current context when awaited. + + A context that, when awaited, will asynchronously transition back into the current context. + If SynchronizationContext.Current is non-null, that is treated as the current context. + Otherwise, TaskScheduler.Current is treated as the current context. + + + + Adds the target exception to the list, initializing the list if it's null. + The list to which to add the exception and initialize if the list is null. + The exception to add, and unwrap if it's an aggregate. + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.Extensions.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.Extensions.dll new file mode 100644 index 0000000..e911377 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.Extensions.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.Extensions.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.Extensions.xml new file mode 100644 index 0000000..af646a2 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.Extensions.xml @@ -0,0 +1,275 @@ + + + + Microsoft.Threading.Tasks.Extensions + + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + + Provides asynchronous wrappers for .NET Framework operations. + + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The cancellation token. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + The cancellation token. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads a maximum of count characters from the reader asynchronously and writes + the data to buffer, beginning at index. + + + When the operation completes, contains the specified character array with the + values between index and (index + count - 1) replaced by the characters read + from the current source. + + + The maximum number of characters to read. If the end of the stream is reached + before count of characters is read into buffer, the current method returns. + + The place in buffer at which to begin writing. + the source reader. + A Task that represents the asynchronous operation. + + + + Reads asynchronously a maximum of count characters from the current stream, and writes the + data to buffer, beginning at index. + + The source reader. + + When this method returns, this parameter contains the specified character + array with the values between index and (index + count -1) replaced by the + characters read from the current source. + + The position in buffer at which to begin writing. + The maximum number of characters to read. + A Task that represents the asynchronous operation. + + + + Reads a line of characters from the reader and returns the string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + + Reads all characters from the current position to the end of the TextReader + and returns them as one string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + Writes a string asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + Writes a line terminator asynchronously to a text stream. + The writer. + A Task representing the asynchronous write. + + + Writes a string followed by a line terminator asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char followed by a line terminator asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + + Clears all buffers for the current writer and causes any buffered data to + be written to the underlying device. + + The writer. + A Task representing the asynchronous flush. + + + Starts an asynchronous request for a web resource. + Task that represents the asynchronous request. + The stream is already in use by a previous call to . + + The source. + + + Starts an asynchronous request for a object to use to write data. + Task that represents the asynchronous request. + The property is GET and the application writes to the stream. + The stream is being used by a previous call to . + No write stream is available. + + The source. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.dll new file mode 100644 index 0000000..065d746 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.xml new file mode 100644 index 0000000..5c22030 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/net45/Microsoft.Threading.Tasks.xml @@ -0,0 +1,630 @@ + + + + Microsoft.Threading.Tasks + + + + + Provides extension methods for threading-related types. + + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time in milliseconds for the source to be canceled. + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time for the source to be canceled. + + + Gets an awaiter used to await this . + The task to await. + An awaiter instance. + + + Gets an awaiter used to await this . + Specifies the type of data returned by the task. + The task to await. + An awaiter instance. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Event handler for progress reports. + Specifies the type of data for the progress report. + The sender of the report. + The reported value. + + + + Provides an IProgress{T} that invokes callbacks for each reported progress value. + + Specifies the type of the progress report value. + + Any handler provided to the constructor or event handlers registered with + the event are invoked through a + instance captured + when the instance is constructed. If there is no current SynchronizationContext + at the time of construction, the callbacks will be invoked on the ThreadPool. + + + + The synchronization context captured upon construction. This will never be null. + + + The handler specified to the constructor. This may be null. + + + A cached delegate used to post invocation to the synchronization context. + + + Initializes the . + + + Initializes the with the specified callback. + + A handler to invoke for each reported progress value. This handler will be invoked + in addition to any delegates registered with the event. + + The is null (Nothing in Visual Basic). + + + Reports a progress change. + The value of the updated progress. + + + Reports a progress change. + The value of the updated progress. + + + Invokes the action and event callbacks. + The progress value. + + + Raised for each reported progress value. + + Handlers registered with this event will be invoked on the + captured when the instance was constructed. + + + + Holds static values for . + This avoids one static instance per type T. + + + A default synchronization context that targets the ThreadPool. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The to await. + + true to attempt to marshal the continuation back to the original context captured + when BeginAwait is called; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The underlying awaitable on whose logic this awaitable relies. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The default value to use for continueOnCapturedContext. + + + Error message for GetAwaiter. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + + Fast checks for the end of an await operation to determine whether more needs to be done + prior to completing the await. + + The awaited task. + + + Handles validations on tasks that aren't successfully completed. + The awaited task. + + + Throws an exception to handle a task that completed in a state other than RanToCompletion. + + + Schedules the continuation onto the associated with this . + The awaited task. + The action to invoke when the await operation completes. + Whether to capture and marshal back to the current context. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Invokes the delegate in a try/catch that will propagate the exception asynchronously on the ThreadPool. + + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Whether the current thread is appropriate for inlining the await continuation. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable context for switching into a target environment. + This type is intended for compiler use only. + + + Gets an awaiter for this . + An awaiter for this awaitable. + This method is intended for compiler user rather than use directly in code. + + + Provides an awaiter that switches into a target environment. + This type is intended for compiler use only. + + + A completed task. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Ends the await operation. + + + Gets whether a yield is not required. + This property is intended for compiler user rather than use directly in code. + + + Provides methods for creating and manipulating tasks. + + + Creates a task that runs the specified action. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified action. + The action to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the function. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + An already completed task. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + + A callback invoked when all of the tasks complete successfully in the RanToCompletion state. + This callback is responsible for storing the results into the TaskCompletionSource. + + A Task that represents the completion of all of the provided tasks. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates an already completed from the specified result. + The result from which to create the completed task. + The completed task. + + + Creates an awaitable that asynchronously yields back to the current context when awaited. + + A context that, when awaited, will asynchronously transition back into the current context. + If SynchronizationContext.Current is non-null, that is treated as the current context. + Otherwise, TaskScheduler.Current is treated as the current context. + + + + Adds the target exception to the list, initializing the list if it's null. + The list to which to add the exception and initialize if the list is null. + The exception to add, and unwrap if it's an aggregate. + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.Extensions.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.Extensions.dll new file mode 100644 index 0000000..e911377 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.Extensions.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.Extensions.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.Extensions.xml new file mode 100644 index 0000000..af646a2 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.Extensions.xml @@ -0,0 +1,275 @@ + + + + Microsoft.Threading.Tasks.Extensions + + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + + Provides asynchronous wrappers for .NET Framework operations. + + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The cancellation token. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + The cancellation token. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads a maximum of count characters from the reader asynchronously and writes + the data to buffer, beginning at index. + + + When the operation completes, contains the specified character array with the + values between index and (index + count - 1) replaced by the characters read + from the current source. + + + The maximum number of characters to read. If the end of the stream is reached + before count of characters is read into buffer, the current method returns. + + The place in buffer at which to begin writing. + the source reader. + A Task that represents the asynchronous operation. + + + + Reads asynchronously a maximum of count characters from the current stream, and writes the + data to buffer, beginning at index. + + The source reader. + + When this method returns, this parameter contains the specified character + array with the values between index and (index + count -1) replaced by the + characters read from the current source. + + The position in buffer at which to begin writing. + The maximum number of characters to read. + A Task that represents the asynchronous operation. + + + + Reads a line of characters from the reader and returns the string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + + Reads all characters from the current position to the end of the TextReader + and returns them as one string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + Writes a string asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + Writes a line terminator asynchronously to a text stream. + The writer. + A Task representing the asynchronous write. + + + Writes a string followed by a line terminator asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char followed by a line terminator asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + + Clears all buffers for the current writer and causes any buffered data to + be written to the underlying device. + + The writer. + A Task representing the asynchronous flush. + + + Starts an asynchronous request for a web resource. + Task that represents the asynchronous request. + The stream is already in use by a previous call to . + + The source. + + + Starts an asynchronous request for a object to use to write data. + Task that represents the asynchronous request. + The property is GET and the application writes to the stream. + The stream is being used by a previous call to . + No write stream is available. + + The source. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.dll new file mode 100644 index 0000000..065d746 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.xml new file mode 100644 index 0000000..5c22030 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net40+sl4+win8+wp71/Microsoft.Threading.Tasks.xml @@ -0,0 +1,630 @@ + + + + Microsoft.Threading.Tasks + + + + + Provides extension methods for threading-related types. + + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time in milliseconds for the source to be canceled. + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time for the source to be canceled. + + + Gets an awaiter used to await this . + The task to await. + An awaiter instance. + + + Gets an awaiter used to await this . + Specifies the type of data returned by the task. + The task to await. + An awaiter instance. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Event handler for progress reports. + Specifies the type of data for the progress report. + The sender of the report. + The reported value. + + + + Provides an IProgress{T} that invokes callbacks for each reported progress value. + + Specifies the type of the progress report value. + + Any handler provided to the constructor or event handlers registered with + the event are invoked through a + instance captured + when the instance is constructed. If there is no current SynchronizationContext + at the time of construction, the callbacks will be invoked on the ThreadPool. + + + + The synchronization context captured upon construction. This will never be null. + + + The handler specified to the constructor. This may be null. + + + A cached delegate used to post invocation to the synchronization context. + + + Initializes the . + + + Initializes the with the specified callback. + + A handler to invoke for each reported progress value. This handler will be invoked + in addition to any delegates registered with the event. + + The is null (Nothing in Visual Basic). + + + Reports a progress change. + The value of the updated progress. + + + Reports a progress change. + The value of the updated progress. + + + Invokes the action and event callbacks. + The progress value. + + + Raised for each reported progress value. + + Handlers registered with this event will be invoked on the + captured when the instance was constructed. + + + + Holds static values for . + This avoids one static instance per type T. + + + A default synchronization context that targets the ThreadPool. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The to await. + + true to attempt to marshal the continuation back to the original context captured + when BeginAwait is called; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The underlying awaitable on whose logic this awaitable relies. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The default value to use for continueOnCapturedContext. + + + Error message for GetAwaiter. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + + Fast checks for the end of an await operation to determine whether more needs to be done + prior to completing the await. + + The awaited task. + + + Handles validations on tasks that aren't successfully completed. + The awaited task. + + + Throws an exception to handle a task that completed in a state other than RanToCompletion. + + + Schedules the continuation onto the associated with this . + The awaited task. + The action to invoke when the await operation completes. + Whether to capture and marshal back to the current context. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Invokes the delegate in a try/catch that will propagate the exception asynchronously on the ThreadPool. + + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Whether the current thread is appropriate for inlining the await continuation. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable context for switching into a target environment. + This type is intended for compiler use only. + + + Gets an awaiter for this . + An awaiter for this awaitable. + This method is intended for compiler user rather than use directly in code. + + + Provides an awaiter that switches into a target environment. + This type is intended for compiler use only. + + + A completed task. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Ends the await operation. + + + Gets whether a yield is not required. + This property is intended for compiler user rather than use directly in code. + + + Provides methods for creating and manipulating tasks. + + + Creates a task that runs the specified action. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified action. + The action to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the function. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + An already completed task. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + + A callback invoked when all of the tasks complete successfully in the RanToCompletion state. + This callback is responsible for storing the results into the TaskCompletionSource. + + A Task that represents the completion of all of the provided tasks. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates an already completed from the specified result. + The result from which to create the completed task. + The completed task. + + + Creates an awaitable that asynchronously yields back to the current context when awaited. + + A context that, when awaited, will asynchronously transition back into the current context. + If SynchronizationContext.Current is non-null, that is treated as the current context. + Otherwise, TaskScheduler.Current is treated as the current context. + + + + Adds the target exception to the list, initializing the list if it's null. + The list to which to add the exception and initialize if the list is null. + The exception to add, and unwrap if it's an aggregate. + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.Extensions.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.Extensions.dll new file mode 100644 index 0000000..e911377 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.Extensions.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.Extensions.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.Extensions.xml new file mode 100644 index 0000000..af646a2 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.Extensions.xml @@ -0,0 +1,275 @@ + + + + Microsoft.Threading.Tasks.Extensions + + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + + Provides asynchronous wrappers for .NET Framework operations. + + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The cancellation token. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + The cancellation token. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads a maximum of count characters from the reader asynchronously and writes + the data to buffer, beginning at index. + + + When the operation completes, contains the specified character array with the + values between index and (index + count - 1) replaced by the characters read + from the current source. + + + The maximum number of characters to read. If the end of the stream is reached + before count of characters is read into buffer, the current method returns. + + The place in buffer at which to begin writing. + the source reader. + A Task that represents the asynchronous operation. + + + + Reads asynchronously a maximum of count characters from the current stream, and writes the + data to buffer, beginning at index. + + The source reader. + + When this method returns, this parameter contains the specified character + array with the values between index and (index + count -1) replaced by the + characters read from the current source. + + The position in buffer at which to begin writing. + The maximum number of characters to read. + A Task that represents the asynchronous operation. + + + + Reads a line of characters from the reader and returns the string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + + Reads all characters from the current position to the end of the TextReader + and returns them as one string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + Writes a string asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + Writes a line terminator asynchronously to a text stream. + The writer. + A Task representing the asynchronous write. + + + Writes a string followed by a line terminator asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char followed by a line terminator asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + + Clears all buffers for the current writer and causes any buffered data to + be written to the underlying device. + + The writer. + A Task representing the asynchronous flush. + + + Starts an asynchronous request for a web resource. + Task that represents the asynchronous request. + The stream is already in use by a previous call to . + + The source. + + + Starts an asynchronous request for a object to use to write data. + Task that represents the asynchronous request. + The property is GET and the application writes to the stream. + The stream is being used by a previous call to . + No write stream is available. + + The source. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.dll new file mode 100644 index 0000000..065d746 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.xml new file mode 100644 index 0000000..5c22030 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8+wp8/Microsoft.Threading.Tasks.xml @@ -0,0 +1,630 @@ + + + + Microsoft.Threading.Tasks + + + + + Provides extension methods for threading-related types. + + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time in milliseconds for the source to be canceled. + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time for the source to be canceled. + + + Gets an awaiter used to await this . + The task to await. + An awaiter instance. + + + Gets an awaiter used to await this . + Specifies the type of data returned by the task. + The task to await. + An awaiter instance. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Event handler for progress reports. + Specifies the type of data for the progress report. + The sender of the report. + The reported value. + + + + Provides an IProgress{T} that invokes callbacks for each reported progress value. + + Specifies the type of the progress report value. + + Any handler provided to the constructor or event handlers registered with + the event are invoked through a + instance captured + when the instance is constructed. If there is no current SynchronizationContext + at the time of construction, the callbacks will be invoked on the ThreadPool. + + + + The synchronization context captured upon construction. This will never be null. + + + The handler specified to the constructor. This may be null. + + + A cached delegate used to post invocation to the synchronization context. + + + Initializes the . + + + Initializes the with the specified callback. + + A handler to invoke for each reported progress value. This handler will be invoked + in addition to any delegates registered with the event. + + The is null (Nothing in Visual Basic). + + + Reports a progress change. + The value of the updated progress. + + + Reports a progress change. + The value of the updated progress. + + + Invokes the action and event callbacks. + The progress value. + + + Raised for each reported progress value. + + Handlers registered with this event will be invoked on the + captured when the instance was constructed. + + + + Holds static values for . + This avoids one static instance per type T. + + + A default synchronization context that targets the ThreadPool. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The to await. + + true to attempt to marshal the continuation back to the original context captured + when BeginAwait is called; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The underlying awaitable on whose logic this awaitable relies. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The default value to use for continueOnCapturedContext. + + + Error message for GetAwaiter. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + + Fast checks for the end of an await operation to determine whether more needs to be done + prior to completing the await. + + The awaited task. + + + Handles validations on tasks that aren't successfully completed. + The awaited task. + + + Throws an exception to handle a task that completed in a state other than RanToCompletion. + + + Schedules the continuation onto the associated with this . + The awaited task. + The action to invoke when the await operation completes. + Whether to capture and marshal back to the current context. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Invokes the delegate in a try/catch that will propagate the exception asynchronously on the ThreadPool. + + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Whether the current thread is appropriate for inlining the await continuation. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable context for switching into a target environment. + This type is intended for compiler use only. + + + Gets an awaiter for this . + An awaiter for this awaitable. + This method is intended for compiler user rather than use directly in code. + + + Provides an awaiter that switches into a target environment. + This type is intended for compiler use only. + + + A completed task. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Ends the await operation. + + + Gets whether a yield is not required. + This property is intended for compiler user rather than use directly in code. + + + Provides methods for creating and manipulating tasks. + + + Creates a task that runs the specified action. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified action. + The action to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the function. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + An already completed task. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + + A callback invoked when all of the tasks complete successfully in the RanToCompletion state. + This callback is responsible for storing the results into the TaskCompletionSource. + + A Task that represents the completion of all of the provided tasks. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates an already completed from the specified result. + The result from which to create the completed task. + The completed task. + + + Creates an awaitable that asynchronously yields back to the current context when awaited. + + A context that, when awaited, will asynchronously transition back into the current context. + If SynchronizationContext.Current is non-null, that is treated as the current context. + Otherwise, TaskScheduler.Current is treated as the current context. + + + + Adds the target exception to the list, initializing the list if it's null. + The list to which to add the exception and initialize if the list is null. + The exception to add, and unwrap if it's an aggregate. + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.Extensions.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.Extensions.dll new file mode 100644 index 0000000..e911377 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.Extensions.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.Extensions.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.Extensions.xml new file mode 100644 index 0000000..af646a2 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.Extensions.xml @@ -0,0 +1,275 @@ + + + + Microsoft.Threading.Tasks.Extensions + + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + + Provides asynchronous wrappers for .NET Framework operations. + + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The cancellation token. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + The cancellation token. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads a maximum of count characters from the reader asynchronously and writes + the data to buffer, beginning at index. + + + When the operation completes, contains the specified character array with the + values between index and (index + count - 1) replaced by the characters read + from the current source. + + + The maximum number of characters to read. If the end of the stream is reached + before count of characters is read into buffer, the current method returns. + + The place in buffer at which to begin writing. + the source reader. + A Task that represents the asynchronous operation. + + + + Reads asynchronously a maximum of count characters from the current stream, and writes the + data to buffer, beginning at index. + + The source reader. + + When this method returns, this parameter contains the specified character + array with the values between index and (index + count -1) replaced by the + characters read from the current source. + + The position in buffer at which to begin writing. + The maximum number of characters to read. + A Task that represents the asynchronous operation. + + + + Reads a line of characters from the reader and returns the string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + + Reads all characters from the current position to the end of the TextReader + and returns them as one string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + Writes a string asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + Writes a line terminator asynchronously to a text stream. + The writer. + A Task representing the asynchronous write. + + + Writes a string followed by a line terminator asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char followed by a line terminator asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + + Clears all buffers for the current writer and causes any buffered data to + be written to the underlying device. + + The writer. + A Task representing the asynchronous flush. + + + Starts an asynchronous request for a web resource. + Task that represents the asynchronous request. + The stream is already in use by a previous call to . + + The source. + + + Starts an asynchronous request for a object to use to write data. + Task that represents the asynchronous request. + The property is GET and the application writes to the stream. + The stream is being used by a previous call to . + No write stream is available. + + The source. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.dll new file mode 100644 index 0000000..065d746 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.xml new file mode 100644 index 0000000..5c22030 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/portable-net45+win8/Microsoft.Threading.Tasks.xml @@ -0,0 +1,630 @@ + + + + Microsoft.Threading.Tasks + + + + + Provides extension methods for threading-related types. + + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time in milliseconds for the source to be canceled. + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time for the source to be canceled. + + + Gets an awaiter used to await this . + The task to await. + An awaiter instance. + + + Gets an awaiter used to await this . + Specifies the type of data returned by the task. + The task to await. + An awaiter instance. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Event handler for progress reports. + Specifies the type of data for the progress report. + The sender of the report. + The reported value. + + + + Provides an IProgress{T} that invokes callbacks for each reported progress value. + + Specifies the type of the progress report value. + + Any handler provided to the constructor or event handlers registered with + the event are invoked through a + instance captured + when the instance is constructed. If there is no current SynchronizationContext + at the time of construction, the callbacks will be invoked on the ThreadPool. + + + + The synchronization context captured upon construction. This will never be null. + + + The handler specified to the constructor. This may be null. + + + A cached delegate used to post invocation to the synchronization context. + + + Initializes the . + + + Initializes the with the specified callback. + + A handler to invoke for each reported progress value. This handler will be invoked + in addition to any delegates registered with the event. + + The is null (Nothing in Visual Basic). + + + Reports a progress change. + The value of the updated progress. + + + Reports a progress change. + The value of the updated progress. + + + Invokes the action and event callbacks. + The progress value. + + + Raised for each reported progress value. + + Handlers registered with this event will be invoked on the + captured when the instance was constructed. + + + + Holds static values for . + This avoids one static instance per type T. + + + A default synchronization context that targets the ThreadPool. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The to await. + + true to attempt to marshal the continuation back to the original context captured + when BeginAwait is called; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The underlying awaitable on whose logic this awaitable relies. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The default value to use for continueOnCapturedContext. + + + Error message for GetAwaiter. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + + Fast checks for the end of an await operation to determine whether more needs to be done + prior to completing the await. + + The awaited task. + + + Handles validations on tasks that aren't successfully completed. + The awaited task. + + + Throws an exception to handle a task that completed in a state other than RanToCompletion. + + + Schedules the continuation onto the associated with this . + The awaited task. + The action to invoke when the await operation completes. + Whether to capture and marshal back to the current context. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Invokes the delegate in a try/catch that will propagate the exception asynchronously on the ThreadPool. + + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Whether the current thread is appropriate for inlining the await continuation. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable context for switching into a target environment. + This type is intended for compiler use only. + + + Gets an awaiter for this . + An awaiter for this awaitable. + This method is intended for compiler user rather than use directly in code. + + + Provides an awaiter that switches into a target environment. + This type is intended for compiler use only. + + + A completed task. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Ends the await operation. + + + Gets whether a yield is not required. + This property is intended for compiler user rather than use directly in code. + + + Provides methods for creating and manipulating tasks. + + + Creates a task that runs the specified action. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified action. + The action to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the function. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + An already completed task. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + + A callback invoked when all of the tasks complete successfully in the RanToCompletion state. + This callback is responsible for storing the results into the TaskCompletionSource. + + A Task that represents the completion of all of the provided tasks. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates an already completed from the specified result. + The result from which to create the completed task. + The completed task. + + + Creates an awaitable that asynchronously yields back to the current context when awaited. + + A context that, when awaited, will asynchronously transition back into the current context. + If SynchronizationContext.Current is non-null, that is treated as the current context. + Otherwise, TaskScheduler.Current is treated as the current context. + + + + Adds the target exception to the list, initializing the list if it's null. + The list to which to add the exception and initialize if the list is null. + The exception to add, and unwrap if it's an aggregate. + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.Phone.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.Phone.dll new file mode 100644 index 0000000..1d110cc Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.Phone.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.Phone.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.Phone.xml new file mode 100644 index 0000000..515d703 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.Phone.xml @@ -0,0 +1,141 @@ + + + + Microsoft.Threading.Tasks.Extensions.Phone + + + + + Provides asynchronous wrappers for .NET Framework operations. + + + Provides asynchronous wrappers for .NET Framework operations. + + + + Downloads the resource with the specified URI as a string, asynchronously. + The WebClient. + The URI from which to download data. + A Task that contains the downloaded string. + + + Downloads the resource with the specified URI as a string, asynchronously. + The WebClient. + The URI from which to download data. + A Task that contains the downloaded string. + + + Opens a readable stream for the data downloaded from a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a readable stream for the data downloaded from a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + The HTTP method that should be used to open the stream. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + The HTTP method that should be used to open the stream. + A Task that contains the opened stream. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The HTTP method that should be used to upload the data. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The HTTP method that should be used to upload the data. + The data to upload. + A Task containing the data in the response from the upload. + + + Converts a path to a Uri using the WebClient's logic. + Based on WebClient's private GetUri method. + + + Converts a path to a Uri using the WebClient's logic. + Based on WebClient's private GetUri method. + + + Asynchronously invokes an Action on the Dispatcher. + The Dispatcher. + The action to invoke. + A Task that represents the execution of the action. + + + Asynchronously invokes an Action on the Dispatcher. + The Dispatcher. + The function to invoke. + A Task that represents the execution of the function. + + + Used with Task(of void) + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.dll new file mode 100644 index 0000000..e911377 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.xml new file mode 100644 index 0000000..af646a2 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.Extensions.xml @@ -0,0 +1,275 @@ + + + + Microsoft.Threading.Tasks.Extensions + + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + + Provides asynchronous wrappers for .NET Framework operations. + + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The cancellation token. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + The cancellation token. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads a maximum of count characters from the reader asynchronously and writes + the data to buffer, beginning at index. + + + When the operation completes, contains the specified character array with the + values between index and (index + count - 1) replaced by the characters read + from the current source. + + + The maximum number of characters to read. If the end of the stream is reached + before count of characters is read into buffer, the current method returns. + + The place in buffer at which to begin writing. + the source reader. + A Task that represents the asynchronous operation. + + + + Reads asynchronously a maximum of count characters from the current stream, and writes the + data to buffer, beginning at index. + + The source reader. + + When this method returns, this parameter contains the specified character + array with the values between index and (index + count -1) replaced by the + characters read from the current source. + + The position in buffer at which to begin writing. + The maximum number of characters to read. + A Task that represents the asynchronous operation. + + + + Reads a line of characters from the reader and returns the string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + + Reads all characters from the current position to the end of the TextReader + and returns them as one string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + Writes a string asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + Writes a line terminator asynchronously to a text stream. + The writer. + A Task representing the asynchronous write. + + + Writes a string followed by a line terminator asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char followed by a line terminator asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + + Clears all buffers for the current writer and causes any buffered data to + be written to the underlying device. + + The writer. + A Task representing the asynchronous flush. + + + Starts an asynchronous request for a web resource. + Task that represents the asynchronous request. + The stream is already in use by a previous call to . + + The source. + + + Starts an asynchronous request for a object to use to write data. + Task that represents the asynchronous request. + The property is GET and the application writes to the stream. + The stream is being used by a previous call to . + No write stream is available. + + The source. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.dll new file mode 100644 index 0000000..065d746 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.xml new file mode 100644 index 0000000..5c22030 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4-windowsphone71/Microsoft.Threading.Tasks.xml @@ -0,0 +1,630 @@ + + + + Microsoft.Threading.Tasks + + + + + Provides extension methods for threading-related types. + + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time in milliseconds for the source to be canceled. + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time for the source to be canceled. + + + Gets an awaiter used to await this . + The task to await. + An awaiter instance. + + + Gets an awaiter used to await this . + Specifies the type of data returned by the task. + The task to await. + An awaiter instance. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Event handler for progress reports. + Specifies the type of data for the progress report. + The sender of the report. + The reported value. + + + + Provides an IProgress{T} that invokes callbacks for each reported progress value. + + Specifies the type of the progress report value. + + Any handler provided to the constructor or event handlers registered with + the event are invoked through a + instance captured + when the instance is constructed. If there is no current SynchronizationContext + at the time of construction, the callbacks will be invoked on the ThreadPool. + + + + The synchronization context captured upon construction. This will never be null. + + + The handler specified to the constructor. This may be null. + + + A cached delegate used to post invocation to the synchronization context. + + + Initializes the . + + + Initializes the with the specified callback. + + A handler to invoke for each reported progress value. This handler will be invoked + in addition to any delegates registered with the event. + + The is null (Nothing in Visual Basic). + + + Reports a progress change. + The value of the updated progress. + + + Reports a progress change. + The value of the updated progress. + + + Invokes the action and event callbacks. + The progress value. + + + Raised for each reported progress value. + + Handlers registered with this event will be invoked on the + captured when the instance was constructed. + + + + Holds static values for . + This avoids one static instance per type T. + + + A default synchronization context that targets the ThreadPool. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The to await. + + true to attempt to marshal the continuation back to the original context captured + when BeginAwait is called; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The underlying awaitable on whose logic this awaitable relies. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The default value to use for continueOnCapturedContext. + + + Error message for GetAwaiter. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + + Fast checks for the end of an await operation to determine whether more needs to be done + prior to completing the await. + + The awaited task. + + + Handles validations on tasks that aren't successfully completed. + The awaited task. + + + Throws an exception to handle a task that completed in a state other than RanToCompletion. + + + Schedules the continuation onto the associated with this . + The awaited task. + The action to invoke when the await operation completes. + Whether to capture and marshal back to the current context. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Invokes the delegate in a try/catch that will propagate the exception asynchronously on the ThreadPool. + + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Whether the current thread is appropriate for inlining the await continuation. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable context for switching into a target environment. + This type is intended for compiler use only. + + + Gets an awaiter for this . + An awaiter for this awaitable. + This method is intended for compiler user rather than use directly in code. + + + Provides an awaiter that switches into a target environment. + This type is intended for compiler use only. + + + A completed task. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Ends the await operation. + + + Gets whether a yield is not required. + This property is intended for compiler user rather than use directly in code. + + + Provides methods for creating and manipulating tasks. + + + Creates a task that runs the specified action. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified action. + The action to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the function. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + An already completed task. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + + A callback invoked when all of the tasks complete successfully in the RanToCompletion state. + This callback is responsible for storing the results into the TaskCompletionSource. + + A Task that represents the completion of all of the provided tasks. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates an already completed from the specified result. + The result from which to create the completed task. + The completed task. + + + Creates an awaitable that asynchronously yields back to the current context when awaited. + + A context that, when awaited, will asynchronously transition back into the current context. + If SynchronizationContext.Current is non-null, that is treated as the current context. + Otherwise, TaskScheduler.Current is treated as the current context. + + + + Adds the target exception to the list, initializing the list if it's null. + The list to which to add the exception and initialize if the list is null. + The exception to add, and unwrap if it's an aggregate. + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.Silverlight.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.Silverlight.dll new file mode 100644 index 0000000..e683718 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.Silverlight.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.Silverlight.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.Silverlight.xml new file mode 100644 index 0000000..950e092 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.Silverlight.xml @@ -0,0 +1,141 @@ + + + + Microsoft.Threading.Tasks.Extensions.Silverlight + + + + + Provides asynchronous wrappers for .NET Framework operations. + + + Provides asynchronous wrappers for .NET Framework operations. + + + + Downloads the resource with the specified URI as a string, asynchronously. + The WebClient. + The URI from which to download data. + A Task that contains the downloaded string. + + + Downloads the resource with the specified URI as a string, asynchronously. + The WebClient. + The URI from which to download data. + A Task that contains the downloaded string. + + + Opens a readable stream for the data downloaded from a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a readable stream for the data downloaded from a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + The HTTP method that should be used to open the stream. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + The HTTP method that should be used to open the stream. + A Task that contains the opened stream. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The HTTP method that should be used to upload the data. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The HTTP method that should be used to upload the data. + The data to upload. + A Task containing the data in the response from the upload. + + + Converts a path to a Uri using the WebClient's logic. + Based on WebClient's private GetUri method. + + + Converts a path to a Uri using the WebClient's logic. + Based on WebClient's private GetUri method. + + + Asynchronously invokes an Action on the Dispatcher. + The Dispatcher. + The action to invoke. + A Task that represents the execution of the action. + + + Asynchronously invokes an Action on the Dispatcher. + The Dispatcher. + The function to invoke. + A Task that represents the execution of the function. + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + Used with Task(of void) + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.dll new file mode 100644 index 0000000..e911377 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.xml new file mode 100644 index 0000000..af646a2 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.Extensions.xml @@ -0,0 +1,275 @@ + + + + Microsoft.Threading.Tasks.Extensions + + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + + Provides asynchronous wrappers for .NET Framework operations. + + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The cancellation token. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + The cancellation token. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads a maximum of count characters from the reader asynchronously and writes + the data to buffer, beginning at index. + + + When the operation completes, contains the specified character array with the + values between index and (index + count - 1) replaced by the characters read + from the current source. + + + The maximum number of characters to read. If the end of the stream is reached + before count of characters is read into buffer, the current method returns. + + The place in buffer at which to begin writing. + the source reader. + A Task that represents the asynchronous operation. + + + + Reads asynchronously a maximum of count characters from the current stream, and writes the + data to buffer, beginning at index. + + The source reader. + + When this method returns, this parameter contains the specified character + array with the values between index and (index + count -1) replaced by the + characters read from the current source. + + The position in buffer at which to begin writing. + The maximum number of characters to read. + A Task that represents the asynchronous operation. + + + + Reads a line of characters from the reader and returns the string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + + Reads all characters from the current position to the end of the TextReader + and returns them as one string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + Writes a string asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + Writes a line terminator asynchronously to a text stream. + The writer. + A Task representing the asynchronous write. + + + Writes a string followed by a line terminator asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char followed by a line terminator asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + + Clears all buffers for the current writer and causes any buffered data to + be written to the underlying device. + + The writer. + A Task representing the asynchronous flush. + + + Starts an asynchronous request for a web resource. + Task that represents the asynchronous request. + The stream is already in use by a previous call to . + + The source. + + + Starts an asynchronous request for a object to use to write data. + Task that represents the asynchronous request. + The property is GET and the application writes to the stream. + The stream is being used by a previous call to . + No write stream is available. + + The source. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.dll new file mode 100644 index 0000000..065d746 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.xml new file mode 100644 index 0000000..5c22030 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/sl4/Microsoft.Threading.Tasks.xml @@ -0,0 +1,630 @@ + + + + Microsoft.Threading.Tasks + + + + + Provides extension methods for threading-related types. + + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time in milliseconds for the source to be canceled. + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time for the source to be canceled. + + + Gets an awaiter used to await this . + The task to await. + An awaiter instance. + + + Gets an awaiter used to await this . + Specifies the type of data returned by the task. + The task to await. + An awaiter instance. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Event handler for progress reports. + Specifies the type of data for the progress report. + The sender of the report. + The reported value. + + + + Provides an IProgress{T} that invokes callbacks for each reported progress value. + + Specifies the type of the progress report value. + + Any handler provided to the constructor or event handlers registered with + the event are invoked through a + instance captured + when the instance is constructed. If there is no current SynchronizationContext + at the time of construction, the callbacks will be invoked on the ThreadPool. + + + + The synchronization context captured upon construction. This will never be null. + + + The handler specified to the constructor. This may be null. + + + A cached delegate used to post invocation to the synchronization context. + + + Initializes the . + + + Initializes the with the specified callback. + + A handler to invoke for each reported progress value. This handler will be invoked + in addition to any delegates registered with the event. + + The is null (Nothing in Visual Basic). + + + Reports a progress change. + The value of the updated progress. + + + Reports a progress change. + The value of the updated progress. + + + Invokes the action and event callbacks. + The progress value. + + + Raised for each reported progress value. + + Handlers registered with this event will be invoked on the + captured when the instance was constructed. + + + + Holds static values for . + This avoids one static instance per type T. + + + A default synchronization context that targets the ThreadPool. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The to await. + + true to attempt to marshal the continuation back to the original context captured + when BeginAwait is called; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The underlying awaitable on whose logic this awaitable relies. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The default value to use for continueOnCapturedContext. + + + Error message for GetAwaiter. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + + Fast checks for the end of an await operation to determine whether more needs to be done + prior to completing the await. + + The awaited task. + + + Handles validations on tasks that aren't successfully completed. + The awaited task. + + + Throws an exception to handle a task that completed in a state other than RanToCompletion. + + + Schedules the continuation onto the associated with this . + The awaited task. + The action to invoke when the await operation completes. + Whether to capture and marshal back to the current context. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Invokes the delegate in a try/catch that will propagate the exception asynchronously on the ThreadPool. + + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Whether the current thread is appropriate for inlining the await continuation. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable context for switching into a target environment. + This type is intended for compiler use only. + + + Gets an awaiter for this . + An awaiter for this awaitable. + This method is intended for compiler user rather than use directly in code. + + + Provides an awaiter that switches into a target environment. + This type is intended for compiler use only. + + + A completed task. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Ends the await operation. + + + Gets whether a yield is not required. + This property is intended for compiler user rather than use directly in code. + + + Provides methods for creating and manipulating tasks. + + + Creates a task that runs the specified action. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified action. + The action to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the function. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + An already completed task. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + + A callback invoked when all of the tasks complete successfully in the RanToCompletion state. + This callback is responsible for storing the results into the TaskCompletionSource. + + A Task that represents the completion of all of the provided tasks. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates an already completed from the specified result. + The result from which to create the completed task. + The completed task. + + + Creates an awaitable that asynchronously yields back to the current context when awaited. + + A context that, when awaited, will asynchronously transition back into the current context. + If SynchronizationContext.Current is non-null, that is treated as the current context. + Otherwise, TaskScheduler.Current is treated as the current context. + + + + Adds the target exception to the list, initializing the list if it's null. + The list to which to add the exception and initialize if the list is null. + The exception to add, and unwrap if it's an aggregate. + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.Extensions.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.Extensions.dll new file mode 100644 index 0000000..e911377 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.Extensions.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.Extensions.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.Extensions.xml new file mode 100644 index 0000000..af646a2 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.Extensions.xml @@ -0,0 +1,275 @@ + + + + Microsoft.Threading.Tasks.Extensions + + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + + Provides asynchronous wrappers for .NET Framework operations. + + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The cancellation token. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + The cancellation token. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads a maximum of count characters from the reader asynchronously and writes + the data to buffer, beginning at index. + + + When the operation completes, contains the specified character array with the + values between index and (index + count - 1) replaced by the characters read + from the current source. + + + The maximum number of characters to read. If the end of the stream is reached + before count of characters is read into buffer, the current method returns. + + The place in buffer at which to begin writing. + the source reader. + A Task that represents the asynchronous operation. + + + + Reads asynchronously a maximum of count characters from the current stream, and writes the + data to buffer, beginning at index. + + The source reader. + + When this method returns, this parameter contains the specified character + array with the values between index and (index + count -1) replaced by the + characters read from the current source. + + The position in buffer at which to begin writing. + The maximum number of characters to read. + A Task that represents the asynchronous operation. + + + + Reads a line of characters from the reader and returns the string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + + Reads all characters from the current position to the end of the TextReader + and returns them as one string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + Writes a string asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + Writes a line terminator asynchronously to a text stream. + The writer. + A Task representing the asynchronous write. + + + Writes a string followed by a line terminator asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char followed by a line terminator asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + + Clears all buffers for the current writer and causes any buffered data to + be written to the underlying device. + + The writer. + A Task representing the asynchronous flush. + + + Starts an asynchronous request for a web resource. + Task that represents the asynchronous request. + The stream is already in use by a previous call to . + + The source. + + + Starts an asynchronous request for a object to use to write data. + Task that represents the asynchronous request. + The property is GET and the application writes to the stream. + The stream is being used by a previous call to . + No write stream is available. + + The source. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.dll new file mode 100644 index 0000000..065d746 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.xml new file mode 100644 index 0000000..5c22030 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/win8/Microsoft.Threading.Tasks.xml @@ -0,0 +1,630 @@ + + + + Microsoft.Threading.Tasks + + + + + Provides extension methods for threading-related types. + + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time in milliseconds for the source to be canceled. + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time for the source to be canceled. + + + Gets an awaiter used to await this . + The task to await. + An awaiter instance. + + + Gets an awaiter used to await this . + Specifies the type of data returned by the task. + The task to await. + An awaiter instance. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Event handler for progress reports. + Specifies the type of data for the progress report. + The sender of the report. + The reported value. + + + + Provides an IProgress{T} that invokes callbacks for each reported progress value. + + Specifies the type of the progress report value. + + Any handler provided to the constructor or event handlers registered with + the event are invoked through a + instance captured + when the instance is constructed. If there is no current SynchronizationContext + at the time of construction, the callbacks will be invoked on the ThreadPool. + + + + The synchronization context captured upon construction. This will never be null. + + + The handler specified to the constructor. This may be null. + + + A cached delegate used to post invocation to the synchronization context. + + + Initializes the . + + + Initializes the with the specified callback. + + A handler to invoke for each reported progress value. This handler will be invoked + in addition to any delegates registered with the event. + + The is null (Nothing in Visual Basic). + + + Reports a progress change. + The value of the updated progress. + + + Reports a progress change. + The value of the updated progress. + + + Invokes the action and event callbacks. + The progress value. + + + Raised for each reported progress value. + + Handlers registered with this event will be invoked on the + captured when the instance was constructed. + + + + Holds static values for . + This avoids one static instance per type T. + + + A default synchronization context that targets the ThreadPool. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The to await. + + true to attempt to marshal the continuation back to the original context captured + when BeginAwait is called; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The underlying awaitable on whose logic this awaitable relies. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The default value to use for continueOnCapturedContext. + + + Error message for GetAwaiter. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + + Fast checks for the end of an await operation to determine whether more needs to be done + prior to completing the await. + + The awaited task. + + + Handles validations on tasks that aren't successfully completed. + The awaited task. + + + Throws an exception to handle a task that completed in a state other than RanToCompletion. + + + Schedules the continuation onto the associated with this . + The awaited task. + The action to invoke when the await operation completes. + Whether to capture and marshal back to the current context. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Invokes the delegate in a try/catch that will propagate the exception asynchronously on the ThreadPool. + + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Whether the current thread is appropriate for inlining the await continuation. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable context for switching into a target environment. + This type is intended for compiler use only. + + + Gets an awaiter for this . + An awaiter for this awaitable. + This method is intended for compiler user rather than use directly in code. + + + Provides an awaiter that switches into a target environment. + This type is intended for compiler use only. + + + A completed task. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Ends the await operation. + + + Gets whether a yield is not required. + This property is intended for compiler user rather than use directly in code. + + + Provides methods for creating and manipulating tasks. + + + Creates a task that runs the specified action. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified action. + The action to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the function. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + An already completed task. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + + A callback invoked when all of the tasks complete successfully in the RanToCompletion state. + This callback is responsible for storing the results into the TaskCompletionSource. + + A Task that represents the completion of all of the provided tasks. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates an already completed from the specified result. + The result from which to create the completed task. + The completed task. + + + Creates an awaitable that asynchronously yields back to the current context when awaited. + + A context that, when awaited, will asynchronously transition back into the current context. + If SynchronizationContext.Current is non-null, that is treated as the current context. + Otherwise, TaskScheduler.Current is treated as the current context. + + + + Adds the target exception to the list, initializing the list if it's null. + The list to which to add the exception and initialize if the list is null. + The exception to add, and unwrap if it's an aggregate. + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.Phone.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.Phone.dll new file mode 100644 index 0000000..1d110cc Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.Phone.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.Phone.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.Phone.xml new file mode 100644 index 0000000..515d703 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.Phone.xml @@ -0,0 +1,141 @@ + + + + Microsoft.Threading.Tasks.Extensions.Phone + + + + + Provides asynchronous wrappers for .NET Framework operations. + + + Provides asynchronous wrappers for .NET Framework operations. + + + + Downloads the resource with the specified URI as a string, asynchronously. + The WebClient. + The URI from which to download data. + A Task that contains the downloaded string. + + + Downloads the resource with the specified URI as a string, asynchronously. + The WebClient. + The URI from which to download data. + A Task that contains the downloaded string. + + + Opens a readable stream for the data downloaded from a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a readable stream for the data downloaded from a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + The HTTP method that should be used to open the stream. + A Task that contains the opened stream. + + + Opens a writeable stream for uploading data to a resource, asynchronously. + The WebClient. + The URI for which the stream should be opened. + The HTTP method that should be used to open the stream. + A Task that contains the opened stream. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The HTTP method that should be used to upload the data. + The data to upload. + A Task containing the data in the response from the upload. + + + Uploads data in a string to the specified resource, asynchronously. + The WebClient. + The URI to which the data should be uploaded. + The HTTP method that should be used to upload the data. + The data to upload. + A Task containing the data in the response from the upload. + + + Converts a path to a Uri using the WebClient's logic. + Based on WebClient's private GetUri method. + + + Converts a path to a Uri using the WebClient's logic. + Based on WebClient's private GetUri method. + + + Asynchronously invokes an Action on the Dispatcher. + The Dispatcher. + The action to invoke. + A Task that represents the execution of the action. + + + Asynchronously invokes an Action on the Dispatcher. + The Dispatcher. + The function to invoke. + A Task that represents the execution of the function. + + + Used with Task(of void) + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.dll new file mode 100644 index 0000000..e911377 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.xml new file mode 100644 index 0000000..af646a2 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.Extensions.xml @@ -0,0 +1,275 @@ + + + + Microsoft.Threading.Tasks.Extensions + + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + + Provides asynchronous wrappers for .NET Framework operations. + + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Reads a sequence of bytes from the current stream and advances the position within the stream by the number of bytes read. + + A Task that represents the asynchronous read. + The source. + The buffer to read data into. + The byte offset in at which to begin reading. + The maximum number of bytes to read. + The cancellation token. + The array length minus is less than . + is null. + or is negative. + An asynchronous read was attempted past the end of the file. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Writes asynchronously a sequence of bytes to the current stream and advances the current position within this stream by the number of bytes written. + + A Task that represents the asynchronous write. + The source. + The buffer containing data to write to the current stream. + The zero-based byte offset in at which to begin copying bytes to the current stream. + The maximum number of bytes to write. + The cancellation token. + length minus is less than . + is null. + or is negative. + The stream does not support writing. + The stream is closed. + An I/O error occurred. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Flushes asynchronously the current stream. + + A Task that represents the asynchronous flush. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads all the bytes from the current stream and writes them to the destination stream. + + The source stream. + The stream that will contain the contents of the current stream. + The size of the buffer. This value must be greater than zero. The default size is 4096. + The cancellation token to use to cancel the asynchronous operation. + A Task that represents the asynchronous operation. + + + + Reads a maximum of count characters from the reader asynchronously and writes + the data to buffer, beginning at index. + + + When the operation completes, contains the specified character array with the + values between index and (index + count - 1) replaced by the characters read + from the current source. + + + The maximum number of characters to read. If the end of the stream is reached + before count of characters is read into buffer, the current method returns. + + The place in buffer at which to begin writing. + the source reader. + A Task that represents the asynchronous operation. + + + + Reads asynchronously a maximum of count characters from the current stream, and writes the + data to buffer, beginning at index. + + The source reader. + + When this method returns, this parameter contains the specified character + array with the values between index and (index + count -1) replaced by the + characters read from the current source. + + The position in buffer at which to begin writing. + The maximum number of characters to read. + A Task that represents the asynchronous operation. + + + + Reads a line of characters from the reader and returns the string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + + Reads all characters from the current position to the end of the TextReader + and returns them as one string asynchronously. + + the source reader. + A Task that represents the asynchronous operation. + + + Writes a string asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + Writes a line terminator asynchronously to a text stream. + The writer. + A Task representing the asynchronous write. + + + Writes a string followed by a line terminator asynchronously to a text stream. + The writer. + The string to write. + A Task representing the asynchronous write. + + + Writes a char followed by a line terminator asynchronously to a text stream. + The writer. + The char to write. + A Task representing the asynchronous write. + + + Writes a char array followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + A Task representing the asynchronous write. + + + Writes a subarray of characters followed by a line terminator asynchronously to a text stream. + The writer. + The buffer to write. + Starting index in the buffer. + The number of characters to write. + A Task representing the asynchronous write. + + + + Clears all buffers for the current writer and causes any buffered data to + be written to the underlying device. + + The writer. + A Task representing the asynchronous flush. + + + Starts an asynchronous request for a web resource. + Task that represents the asynchronous request. + The stream is already in use by a previous call to . + + The source. + + + Starts an asynchronous request for a object to use to write data. + Task that represents the asynchronous request. + The property is GET and the application writes to the stream. + The stream is being used by a previous call to . + No write stream is available. + + The source. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.dll new file mode 100644 index 0000000..065d746 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.xml b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.xml new file mode 100644 index 0000000..5c22030 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Async.1.0.16/lib/wp8/Microsoft.Threading.Tasks.xml @@ -0,0 +1,630 @@ + + + + Microsoft.Threading.Tasks + + + + + Provides extension methods for threading-related types. + + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time in milliseconds for the source to be canceled. + + + Cancels the after the specified duration. + The CancellationTokenSource. + The due time for the source to be canceled. + + + Gets an awaiter used to await this . + The task to await. + An awaiter instance. + + + Gets an awaiter used to await this . + Specifies the type of data returned by the task. + The task to await. + An awaiter instance. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Creates and configures an awaitable object for awaiting the specified task. + The task to be awaited. + + true to automatic marshag back to the original call site's current SynchronizationContext + or TaskScheduler; otherwise, false. + + The instance to be awaited. + + + Event handler for progress reports. + Specifies the type of data for the progress report. + The sender of the report. + The reported value. + + + + Provides an IProgress{T} that invokes callbacks for each reported progress value. + + Specifies the type of the progress report value. + + Any handler provided to the constructor or event handlers registered with + the event are invoked through a + instance captured + when the instance is constructed. If there is no current SynchronizationContext + at the time of construction, the callbacks will be invoked on the ThreadPool. + + + + The synchronization context captured upon construction. This will never be null. + + + The handler specified to the constructor. This may be null. + + + A cached delegate used to post invocation to the synchronization context. + + + Initializes the . + + + Initializes the with the specified callback. + + A handler to invoke for each reported progress value. This handler will be invoked + in addition to any delegates registered with the event. + + The is null (Nothing in Visual Basic). + + + Reports a progress change. + The value of the updated progress. + + + Reports a progress change. + The value of the updated progress. + + + Invokes the action and event callbacks. + The progress value. + + + Raised for each reported progress value. + + Handlers registered with this event will be invoked on the + captured when the instance was constructed. + + + + Holds static values for . + This avoids one static instance per type T. + + + A default synchronization context that targets the ThreadPool. + + + Throws the exception on the ThreadPool. + The exception to propagate. + The target context on which to propagate the exception. Null to use the ThreadPool. + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The to await. + + true to attempt to marshal the continuation back to the original context captured + when BeginAwait is called; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable object that allows for configured awaits on . + This type is intended for compiler use only. + + + The underlying awaitable on whose logic this awaitable relies. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Gets an awaiter for this awaitable. + The awaiter. + + + Provides an awaiter for a . + This type is intended for compiler use only. + + + The task being awaited. + + + Whether to attempt marshaling back to the original context. + + + Initializes the . + The awaitable . + + true to attempt to marshal the continuation back to the original context captured; otherwise, false. + + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The default value to use for continueOnCapturedContext. + + + Error message for GetAwaiter. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + + Fast checks for the end of an await operation to determine whether more needs to be done + prior to completing the await. + + The awaited task. + + + Handles validations on tasks that aren't successfully completed. + The awaited task. + + + Throws an exception to handle a task that completed in a state other than RanToCompletion. + + + Schedules the continuation onto the associated with this . + The awaited task. + The action to invoke when the await operation completes. + Whether to capture and marshal back to the current context. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Invokes the delegate in a try/catch that will propagate the exception asynchronously on the ThreadPool. + + + + Copies the exception's stack trace so its stack trace isn't overwritten. + The exception to prepare. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Whether the current thread is appropriate for inlining the await continuation. + + + Provides an awaiter for awaiting a . + This type is intended for compiler use only. + + + The task being awaited. + + + Initializes the . + The to be awaited. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Schedules the continuation onto the associated with this . + The action to invoke when the await operation completes. + The argument is null (Nothing in Visual Basic). + The awaiter was not properly initialized. + This method is intended for compiler user rather than use directly in code. + + + Ends the await on the completed . + The result of the completed . + The awaiter was not properly initialized. + The task was not yet completed. + The task was canceled. + The task completed in a Faulted state. + + + Gets whether the task being awaited is completed. + This property is intended for compiler user rather than use directly in code. + The awaiter was not properly initialized. + + + Provides an awaitable context for switching into a target environment. + This type is intended for compiler use only. + + + Gets an awaiter for this . + An awaiter for this awaitable. + This method is intended for compiler user rather than use directly in code. + + + Provides an awaiter that switches into a target environment. + This type is intended for compiler use only. + + + A completed task. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Posts the back to the current context. + The action to invoke asynchronously. + The awaiter was not properly initialized. + + + Ends the await operation. + + + Gets whether a yield is not required. + This property is intended for compiler user rather than use directly in code. + + + Provides methods for creating and manipulating tasks. + + + Creates a task that runs the specified action. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified action. + The action to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute. + The CancellationToken to use to request cancellation of this task. + A task that represents the completion of the function. + The argument is null. + + + Creates a task that runs the specified function. + The function to execute asynchronously. + A task that represents the completion of the action. + The argument is null. + + + Creates a task that runs the specified function. + The action to execute. + The CancellationToken to use to cancel the task. + A task that represents the completion of the action. + The argument is null. + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + Starts a Task that will complete after the specified due time. + The delay in milliseconds before the returned task completes. + A CancellationToken that may be used to cancel the task before the due time occurs. + The timed Task. + + The argument must be non-negative or -1 and less than or equal to Int32.MaxValue. + + + + An already completed task. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + A Task that represents the completion of all of the provided tasks. + + If any of the provided Tasks faults, the returned Task will also fault, and its Exception will contain information + about all of the faulted tasks. If no Tasks fault but one or more Tasks is canceled, the returned + Task will also be canceled. + + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete only when all of the provided collection of Tasks has completed. + The Tasks to monitor for completion. + + A callback invoked when all of the tasks complete successfully in the RanToCompletion state. + This callback is responsible for storing the results into the TaskCompletionSource. + + A Task that represents the completion of all of the provided tasks. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates a Task that will complete when any of the tasks in the provided collection completes. + The Tasks to be monitored. + + A Task that represents the completion of any of the provided Tasks. The completed Task is this Task's result. + + Any Tasks that fault will need to have their exceptions observed elsewhere. + The argument is null. + The argument contains a null reference. + + + Creates an already completed from the specified result. + The result from which to create the completed task. + The completed task. + + + Creates an awaitable that asynchronously yields back to the current context when awaited. + + A context that, when awaited, will asynchronously transition back into the current context. + If SynchronizationContext.Current is non-null, that is treated as the current context. + Otherwise, TaskScheduler.Current is treated as the current context. + + + + Adds the target exception to the list, initializing the list if it's null. + The list to which to add the exception and initialize if the list is null. + The exception to add, and unwrap if it's an aggregate. + + + Returns a canceled task. + The cancellation token. + The canceled task. + + + Returns a canceled task. + Specifies the type of the result. + The cancellation token. + The canceled task. + + + + Completes the Task if the user state matches the TaskCompletionSource. + + Specifies the type of data returned by the Task. + The TaskCompletionSource. + The completion event arguments. + Whether we require the tcs to match the e.UserState. + A function that gets the result with which to complete the task. + An action used to unregister work when the operaiton completes. + + + diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/License-Stable.rtf b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/License-Stable.rtf new file mode 100644 index 0000000..350fcf6 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/License-Stable.rtf @@ -0,0 +1,505 @@ +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff41\deff0\stshfdbch0\stshfloch31506\stshfhich31506\stshfbi31506\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs1025{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} +{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;} +{\f11\fbidi \fmodern\fcharset128\fprq1{\*\panose 02020609040205080304}MS Mincho{\*\falt ?l?r ??\'81\'66c};}{\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ???\'a1\'ec??};} +{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 00000000000000000000}Cambria Math;}{\f40\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0603020202020204}Trebuchet MS{\*\falt Arial};} +{\f41\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma{\*\falt ?? ??};}{\f42\fbidi \fnil\fcharset134\fprq2{\*\panose 00000000000000000000}@SimSun;}{\f43\fbidi \fmodern\fcharset128\fprq1{\*\panose 00000000000000000000}@MS Mincho;} +{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 00000000000000000000}Cambria;}{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}{\f46\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\f47\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f49\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f50\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f51\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\f52\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f53\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f54\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f66\fbidi \fmodern\fcharset238\fprq1 Courier New CE;} +{\f67\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}{\f69\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f70\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f71\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);} +{\f72\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f73\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f74\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);} +{\f158\fbidi \fmodern\fcharset0\fprq1 MS Mincho Western{\*\falt ?l?r ??\'81\'66c};}{\f156\fbidi \fmodern\fcharset238\fprq1 MS Mincho CE{\*\falt ?l?r ??\'81\'66c};}{\f157\fbidi \fmodern\fcharset204\fprq1 MS Mincho Cyr{\*\falt ?l?r ??\'81\'66c};} +{\f159\fbidi \fmodern\fcharset161\fprq1 MS Mincho Greek{\*\falt ?l?r ??\'81\'66c};}{\f160\fbidi \fmodern\fcharset162\fprq1 MS Mincho Tur{\*\falt ?l?r ??\'81\'66c};}{\f163\fbidi \fmodern\fcharset186\fprq1 MS Mincho Baltic{\*\falt ?l?r ??\'81\'66c};} +{\f178\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt ???\'a1\'ec??};}{\f386\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f387\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f389\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;} +{\f390\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f393\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f394\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}{\f446\fbidi \fswiss\fcharset238\fprq2 Trebuchet MS CE{\*\falt Arial};} +{\f447\fbidi \fswiss\fcharset204\fprq2 Trebuchet MS Cyr{\*\falt Arial};}{\f449\fbidi \fswiss\fcharset161\fprq2 Trebuchet MS Greek{\*\falt Arial};}{\f450\fbidi \fswiss\fcharset162\fprq2 Trebuchet MS Tur{\*\falt Arial};} +{\f453\fbidi \fswiss\fcharset186\fprq2 Trebuchet MS Baltic{\*\falt Arial};}{\f456\fbidi \fswiss\fcharset238\fprq2 Tahoma CE{\*\falt ?? ??};}{\f457\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr{\*\falt ?? ??};} +{\f459\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek{\*\falt ?? ??};}{\f460\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur{\*\falt ?? ??};}{\f461\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew){\*\falt ?? ??};} +{\f462\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic){\*\falt ?? ??};}{\f463\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic{\*\falt ?? ??};}{\f464\fbidi \fswiss\fcharset163\fprq2 Tahoma (Vietnamese){\*\falt ?? ??};} +{\f465\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai){\*\falt ?? ??};}{\f468\fbidi \fnil\fcharset0\fprq2 @SimSun Western;}{\f478\fbidi \fmodern\fcharset0\fprq1 @MS Mincho Western;}{\f476\fbidi \fmodern\fcharset238\fprq1 @MS Mincho CE;} +{\f477\fbidi \fmodern\fcharset204\fprq1 @MS Mincho Cyr;}{\f479\fbidi \fmodern\fcharset161\fprq1 @MS Mincho Greek;}{\f480\fbidi \fmodern\fcharset162\fprq1 @MS Mincho Tur;}{\f483\fbidi \fmodern\fcharset186\fprq1 @MS Mincho Baltic;} +{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;} +{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;} +{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;} +{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} +{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \fswiss\fcharset238\fprq2 Arial CE;}{\fbiminor\f31579\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;} +{\fbiminor\f31581\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\fbiminor\f31582\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\fbiminor\f31583\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);} +{\fbiminor\f31584\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);}{\fbiminor\f31585\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\fbiminor\f31586\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255; +\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0; +\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\ctextone\ctint255\cshade255\red0\green0\blue0;}{\*\defchp \f31506\fs22 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \snext0 \sautoupd \sqformat \spriority0 \styrsid15686224 Normal;}{\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext1 \slink15 \sqformat \styrsid15686224 heading 1;}{\s2\ql \fi-363\li720\ri0\sb120\sa120\widctlpar\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0 \rtlch\fcs1 +\ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext2 \slink16 \sqformat \styrsid15686224 heading 2;}{\s3\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\tx1077\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext3 \slink17 \sqformat \styrsid15686224 heading 3;}{\s4\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl3\outlinelevel3\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 +\af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext4 \slink18 \sqformat \styrsid15686224 heading 4;}{\s5\ql \fi-357\li1792\ri0\sb120\sa120\widctlpar +\tx1792\jclisttab\tx2155\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl4\outlinelevel4\adjustright\rin0\lin1792\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext5 \slink19 \sqformat \styrsid15686224 heading 5;}{\s6\ql \fi-357\li2149\ri0\sb120\sa120\widctlpar\jclisttab\tx2152\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl5\outlinelevel5\adjustright\rin0\lin2149\itap0 \rtlch\fcs1 +\af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext6 \slink20 \sqformat \styrsid15686224 heading 6;}{\s7\ql \fi-357\li2506\ri0\sb120\sa120\widctlpar +\jclisttab\tx2509\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl6\outlinelevel6\adjustright\rin0\lin2506\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext7 \slink21 \sqformat \styrsid15686224 heading 7;}{\s8\ql \fi-357\li2863\ri0\sb120\sa120\widctlpar\jclisttab\tx2866\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl7\outlinelevel7\adjustright\rin0\lin2863\itap0 \rtlch\fcs1 +\af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext8 \slink22 \sqformat \styrsid15686224 heading 8;}{\s9\ql \fi-358\li3221\ri0\sb120\sa120\widctlpar +\jclisttab\tx3223\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl8\outlinelevel8\adjustright\rin0\lin3221\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext9 \slink23 \sqformat \styrsid15686224 heading 9;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31506\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}{\*\cs15 \additive +\rtlch\fcs1 \ab\af41\afs19 \ltrch\fcs0 \b\fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink1 \slocked \styrsid15686224 Heading 1 Char;}{\*\cs16 \additive \rtlch\fcs1 \ab\af41\afs19 \ltrch\fcs0 \b\fs19\loch\f41\hich\af41\dbch\af11 +\sbasedon10 \slink2 \slocked \styrsid15686224 Heading 2 Char;}{\*\cs17 \additive \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink3 \slocked \styrsid15686224 Heading 3 Char;}{\*\cs18 \additive \rtlch\fcs1 +\af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink4 \slocked \styrsid15686224 Heading 4 Char;}{\*\cs19 \additive \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 +\sbasedon10 \slink5 \slocked \styrsid15686224 Heading 5 Char;}{\*\cs20 \additive \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink6 \slocked \styrsid15686224 Heading 6 Char;}{\*\cs21 \additive \rtlch\fcs1 +\af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink7 \slocked \styrsid15686224 Heading 7 Char;}{\*\cs22 \additive \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 +\sbasedon10 \slink8 \slocked \styrsid15686224 Heading 8 Char;}{\*\cs23 \additive \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink9 \slocked \styrsid15686224 Heading 9 Char;}{ +\s24\ql \li357\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext24 \styrsid15686224 Body 1;}{\s25\ql \fi-363\li720\ri0\sb120\sa120\widctlpar\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext25 \styrsid15686224 Bullet 2;}{\s26\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar +\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext26 \styrsid15686224 Bullet 4;}{\s27\ql \fi-357\li1792\ri0\sb120\sa120\widctlpar\jclisttab\tx1795\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin1792\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext27 \styrsid15686224 Bullet 5;}{\s28\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\ab\af41\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \styrsid15686224 Heading EULA;}{\s29\ql \li0\ri0\sb120\sa120\widctlpar\brdrb\brdrs\brdrw10\brsp20 +\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af41\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \styrsid15686224 +Heading Software Title;}{\s30\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext30 \styrsid15686224 Preamble;}{\s31\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\tx1077\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls4\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon3 \snext31 \slink38 \styrsid15686224 Heading 3 Bold;}{\s32\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\ul\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon26 \snext32 \styrsid15686224 Bullet 4 Underline;}{\*\cs33 \additive \rtlch\fcs1 \af41 \ltrch\fcs0 \f41\lang1033\langfe1033\langnp1033\langfenp1033 +\sbasedon10 \styrsid15686224 Body 2 Char;}{\*\cs34 \additive \rtlch\fcs1 \af41 \ltrch\fcs0 \f41\lang1033\langfe1033\langnp1033\langfenp1033 \sbasedon10 \styrsid15686224 Body 3 Char;}{\s35\ql \li0\ri0\sb120\sa120\widctlpar\brdrt\brdrs\brdrw10\brsp20 +\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon30 \snext35 \styrsid15686224 +Preamble Border Above;}{\*\cs36 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf2 \sbasedon10 \styrsid15686224 Hyperlink,Char Char7;}{\s37\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \snext0 \slink39 \styrsid15686224 Body 0 Bold;}{\*\cs38 \additive \rtlch\fcs1 \ab\af41\afs19 \ltrch\fcs0 +\b\fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink31 \slocked \styrsid15686224 Heading 3 Bold Char;}{\*\cs39 \additive \rtlch\fcs1 \ab\af41\afs19 \ltrch\fcs0 \b\fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink37 \slocked \styrsid15686224 +Body 0 Bold Char;}{\*\cs40 \additive \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \f41\fs20 \sbasedon10 \slink41 \slocked \styrsid15686224 Bullet 3 Char1;}{\s41\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \f41\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext41 \slink40 \styrsid15686224 Bullet 3;}{ +\s42\ql \fi-357\li357\ri0\sb120\sa120\widctlpar\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \f41\fs20\ul\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 +\sbasedon41 \snext42 \sautoupd \styrsid15686224 Bullet 3 Underline;}{\s43\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs16\alang1025 \ltrch\fcs0 +\fs16\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext43 \slink44 \ssemihidden \sunhideused \styrsid3699522 Balloon Text;}{\*\cs44 \additive \rtlch\fcs1 \af41\afs16 \ltrch\fcs0 +\fs16\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink43 \slocked \ssemihidden \styrsid3699522 Balloon Text Char;}{\*\cs45 \additive \rtlch\fcs1 \af0\afs16 \ltrch\fcs0 \fs16 \sbasedon10 \ssemihidden \sunhideused \styrsid3699522 annotation reference;}{ +\s46\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext46 \slink47 \ssemihidden \sunhideused \styrsid3699522 annotation text;}{\*\cs47 \additive \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink46 \slocked \ssemihidden \styrsid3699522 +Comment Text Char;}{\s48\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af41\afs20\alang1025 \ltrch\fcs0 +\b\fs20\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon46 \snext46 \slink49 \ssemihidden \sunhideused \styrsid3699522 annotation subject;}{\*\cs49 \additive \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 +\b\fs20\loch\f41\hich\af41\dbch\af11 \sbasedon47 \slink48 \slocked \ssemihidden \styrsid3699522 Comment Subject Char;}}{\*\listtable{\list\listtemplateid1928476992{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\fbias0 \fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\fbias0 \fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af41\afs20 \ltrch\fcs0 \b\i0\f41\fs20\fbias0 \s31\fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\strike0\f40\fs20\ulnone\fbias0 \fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\strike0\f40\fs20\ulnone\fbias0 \fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid398796681} +{\list\listtemplateid789093748\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-317712510\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s25\fi-363\li720 +\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23 +\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691 +\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;} +\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid477573462}{\list\listtemplateid1904874988{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af41\afs20 \ltrch\fcs0 \b\i0\f41\fs20\cf0\fbias0 \s1\fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af41\afs20 \ltrch\fcs0 \b\i0\f41\fs20\fbias0 \s2\fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af41\afs20 \ltrch\fcs0 \b\i0\f41\fs20\fbias0 \s3\fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\strike0\f40\fs20\ulnone\fbias0 \s4\fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\strike0\f40\fs20\ulnone\fbias0 \s5\fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \s6\fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \s7\fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \s8\fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \s9\fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid752163927}{\list\listtemplateid285099256 +\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-308626962\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s42\fi-357\li1077\jclisttab\tx1080\lin1077 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689 +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;} +\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid1121073746}{\list\listtemplateid303218272\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid612407812 +\'01\u-3913 ?;}{\levelnumbers;}\f3\cf17\fbias0 \s26\fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 +\fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 +\fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1559511898}{\list\listtemplateid-743794326\listhybrid +{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid1229593488\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s41\fi-357\li1077\jclisttab\tx1080\lin1077 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;} +\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760 +\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 } +{\listname ;}\listid1567649130}{\list\listtemplateid-961874242\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-1175557160\'01\u-3913 ?;}{\levelnumbers;} +\f3\fbias0 \s27\fi-357\li1792\jclisttab\tx1795\lin1792 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440 +\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 } +{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1848404271}}{\*\listoverridetable{\listoverride\listid477573462\listoverridecount0\ls1}{\listoverride\listid1559511898\listoverridecount0\ls2} +{\listoverride\listid1848404271\listoverridecount0\ls3}{\listoverride\listid398796681\listoverridecount0\ls4}{\listoverride\listid752163927\listoverridecount0\ls5}{\listoverride\listid398796681\listoverridecount9{\lfolevel\listoverridestartat +\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel +\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}\ls6}{\listoverride\listid1567649130\listoverridecount0\ls7}{\listoverride\listid1559511898\listoverridecount0\ls8} +{\listoverride\listid1121073746\listoverridecount0\ls9}{\listoverride\listid752163927\listoverridecount0\ls10}}{\*\pgptbl {\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp5\itap0\li0\ri0\sb0\sa300}{\pgp\ipgp2\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0 +\sa0}{\pgp\ipgp7\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp1\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp6\itap0\li0\ri0\sb0\sa0}}{\*\rsidtbl \rsid874403\rsid1473980\rsid2177578\rsid2693076\rsid3699522\rsid4000782\rsid4423363\rsid6097754\rsid7214391\rsid8995160\rsid12062545 +\rsid13846008\rsid14566738\rsid14751308\rsid15014299\rsid15467703\rsid15686224\rsid15928942\rsid15934954}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author kathan} +{\operator Alok Shriram}{\creatim\yr2013\mo3\dy20\hr15\min24}{\revtim\yr2013\mo3\dy20\hr15\min30}{\version4}{\edmins1}{\nofpages4}{\nofwords1340}{\nofchars7643}{\*\company Microsoft Corporation}{\nofcharsws8966}{\vern57427}}{\*\xmlnstbl {\xmlns1 http://sc +hemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect +\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen +\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1440\dgvorigin1440\dghshow1\dgvshow1 +\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct +\asianbrkrule\rsidroot15686224\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0 +{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang +{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang +{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}} +\pard\plain \ltrpar\s28\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs28\alang1025 \ltrch\fcs0 +\b\fs28\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 MICROSOFT SOFTWARE LICENSE TERMS +\par }\pard\plain \ltrpar\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14566738 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224\charrsid7214391 \hich\af41\dbch\af13\loch\f41 MICROSOFT }{\rtlch\fcs1 \ab\af41\afs20 +\ltrch\fcs0 \b\fs20\dbch\af13\insrsid13846008 \hich\af41\dbch\af13\loch\f41 BCL Build Component}{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid14566738 \hich\af41\dbch\af13\loch\f41 .dll }{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 +\b\fs20\dbch\af13\insrsid7214391\charrsid7214391 \hich\af41\dbch\af13\loch\f41 PACKAGE}{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224\charrsid7214391 \hich\af41\dbch\af13\loch\f41 }{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 +\b\fs20\dbch\af13\insrsid14751308\charrsid7214391 +\par }\pard\plain \ltrpar\s29\ql \li0\ri0\sb120\sa120\nowidctlpar\brdrb\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs28\alang1025 \ltrch\fcs0 +\b\fs28\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\par }\pard\plain \ltrpar\s30\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms +\hich\af41\dbch\af13\loch\f41 a\hich\af41\dbch\af13\loch\f41 lso apply to any Microsoft +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 updates, +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 supplements, +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 Internet-based services, and +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 support services +\par }\pard\plain \ltrpar\s30\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 +for this software, unless other terms accompany those items. If so, those terms apply. +\par }{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEP\hich\af41\dbch\af13\loch\f41 T THEM, DO NOT USE THE SOFTWARE. +\par }\pard\plain \ltrpar\s35\ql \li0\ri0\sb120\sa120\nowidctlpar\brdrt\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\insrsid15686224 \hich\af41\dbch\af11\loch\f41 IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE PERPETUAL RIGHTS BELOW.}{ +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 1.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid14566738 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 INSTALLATION AND USE RIGHTS. }{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14566738 \hich\af41\dbch\af13\loch\f41 You}{\rtlch\fcs1 +\ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14566738\charrsid15934954 \hich\af41\dbch\af13\loch\f41 may install and use any number of copies of the software on your devices to design, develop and test your pr\hich\af41\dbch\af13\loch\f41 ograms +}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14566738 .}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224\charrsid14566738 \hich\af41\dbch\af13\loch\f41 2.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid15686224\charrsid14566738 \hich\af41\dbch\af13\loch\f41 DISTRIBUTABLE CODE. }{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14566738 \hich\af41\dbch\af13\loch\f41 }{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid15686224\charrsid14566738 \hich\af41\dbch\af13\loch\f41 \hich\f41 The software is comprised of Distributable Code. \'93\loch\f41 \hich\f41 Distributable Code\'94\loch\f41 + is code that you are permitted to distribute in programs you develop if you comply with the terms below. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 a.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 Right to Use and Distribute. +\par {\listtext\pard\plain\ltrpar \s42 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s42\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \f41\fs20\ul\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 +\ulnone\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 Yo\hich\af41\dbch\af13\loch\f41 u may copy and distribute the object code form of the software. +\par {\listtext\pard\plain\ltrpar \s42 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af41 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 +Third Party Distribution}{\rtlch\fcs1 \af41 \ltrch\fcs0 \ulnone\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 . You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 b.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 Distribution Requirements. For any Distribu\hich\af41\dbch\af13\loch\f41 +table Code you distribute, you must +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s41\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \f41\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 +\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 add significant primary functionality to it in your programs; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your \hich\af41\dbch\af13\loch\f41 program; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +distribute Distributable Code included in a setup program only as part of that setup program without modification; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +require distributors and external end users to agree to terms that protect it at least as much as this agreement; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 display your valid copyright notice on your programs; and +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +indemnify, defend, and hold harmless Microsoft from any claims, including attorneys\hich\f41 \rquote \loch\f41 fees, related to the distribution or use of your programs. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 c.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 Distribution Restrictions. You may not +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s41\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \f41\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 +\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 alter an\hich\af41\dbch\af13\loch\f41 y copyright, trademark or patent notice in the Distributable Code; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 use Microsoft\hich\f41 \rquote \loch\f41 +s trademarks in your programs\hich\f41 \rquote \loch\f41 names or in a way that suggests your programs come from or are endorsed by Microsoft; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 distribute Distributable Code to run on a platform oth +\hich\af41\dbch\af13\loch\f41 er than the Windows platform; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +include Distributable Code in malicious, deceptive or unlawful programs; or +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License \hich\af41\dbch\af13\loch\f41 is one that requires, as a condition of use, modification or distribution, that + +\par {\listtext\pard\plain\ltrpar \s26 \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\cf17\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s26\ql \fi-358\li1435\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls8\adjustright\rin0\lin1435\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af41 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 the code be disclosed or distributed in source code form; or +\par {\listtext\pard\plain\ltrpar \s27 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s27\ql \fi-357\li1792\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1795\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin1792\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 others have the right to modify it. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 3.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 SCOPE OF LICENSE.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + The software is licensed, not sold. This agreement onl\hich\af41\dbch\af13\loch\f41 +y gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply wit +\hich\af41\dbch\af13\loch\f41 h\hich\af41\dbch\af13\loch\f41 any technical limitations in the software that only allow you to use it in certain ways. You may not +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 work around any technical limitations in the software; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +reverse engineer, decompile or disassemble the software, except and only to the extent that app\hich\af41\dbch\af13\loch\f41 licable law expressly permits, despite this limitation; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 publish the software for others to copy; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 rent, lease or lend the software\hich\af41\dbch\af13\loch\f41 ; + +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 transfer the software or this agreement to any third party; or + +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 use the software for commercial software hosting services. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 4.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 BACKUP COPY.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + You may make one backup copy of the software. You may use it only to reinstall the software. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 5.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af41\dbch\af13\loch\f41 DOCUMENTATION.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 6.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af41\dbch\af13\loch\f41 EXPORT RESTRICTIONS.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 The software is subject to United States export laws and regulations. You must comply w +\hich\af41\dbch\af13\loch\f41 ith all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see }{\rtlch\fcs1 \ab0\af0\afs20 +\ltrch\fcs0 \cs36\b0\fs20\ul\cf2\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 www.microsoft.com/exporting}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 .}{\rtlch\fcs1 \ab0\af0\afs20 \ltrch\fcs0 +\cs36\b0\fs20\ul\cf2\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 7.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af41\dbch\af13\loch\f41 SUPPORT SERVICES. }{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 Because thi\hich\af41\dbch\af13\loch\f41 \hich\f41 s software is \'93\loch\f41 \hich\f41 as is,\'94 +\loch\f41 we may not provide support services for it. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 8.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af41\dbch\af13\loch\f41 ENTIRE AGREEMENT.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support\hich\af41\dbch\af13\loch\f41 services. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 9.\tab}}\pard \ltrpar\s1\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin360\itap0\pararsid15686224 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 APPLICABLE LAW. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 a.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 United States.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws\hich\af41\dbch\af13\loch\f41 + of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 b.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af41\dbch\af13\loch\f41 Outside the United States.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 If you acquired the software in any other country, the laws of that country app +\hich\af41\dbch\af13\loch\f41 ly. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 10.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 LEGAL EFFECT.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your right +\hich\af41\dbch\af13\loch\f41 s under the laws of your country if the laws of your country do not permit it to do so. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 11.\tab}}\pard \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 \hich\f41 +DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED \'93\loch\f41 \hich\f41 AS-IS.\'94\loch\f41 YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HA\hich\af41\dbch\af13\loch\f41 +VE ADDITIONAL CONSUMER RIGHTS OR STATUTORY GUARANTEES UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE A +\hich\af41\dbch\af13\loch\f41 N\hich\af41\dbch\af13\loch\f41 D NON-INFRINGEMENT. +\par }\pard\plain \ltrpar\s24\ql \li357\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 FOR AUSTRALIA \hich\f41 \endash \loch\f41 + YOU HAVE STATUTORY GUARANTEES UNDER THE AUSTRALIAN CONSUMER LAW AND NOTHING IN THESE TERMS IS INTENDED TO AFFECT THOSE RIGHTS. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 12.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\insrsid15686224 \hich\af41\dbch\af11\loch\f41 +. YOU CAN RECOVER FROM MICROSOFT AND I\hich\af41\dbch\af11\loch\f41 TS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. +\par }\pard\plain \ltrpar\s24\ql \li357\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 This limitation applies to +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 anything related to the software, services, content (inclu\hich\af41\dbch\af13\loch\f41 ding code) on third party Internet sites, or third party programs; and +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. +\par }\pard\plain \ltrpar\ql \li360\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 It also applies even \hich\af41\dbch\af13\loch\f41 +if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. +\par }\pard \ltrpar\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 {\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 +Please note: A\hich\af41\dbch\af13\loch\f41 s this software is distributed in Quebec, Canada, some of the clauses in this agreement are provided below in French. +\par }{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299 +\par +\par }{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 \hich\f41 Remarque : Ce logiciel \'e9\loch\f41 \hich\f41 tant distribu\'e9\loch\f41 \hich\f41 au Qu +\'e9\loch\f41 \hich\f41 bec, Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en fran\'e7\loch\f41 ais. +\par \hich\af41\dbch\af13\loch\f41 EX\hich\af41\dbch\af13\loch\f41 \hich\f41 ON\'c9\loch\f41 RATION DE GARANTIE.}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 +\hich\f41 Le logiciel vis\'e9\loch\f41 \hich\f41 par une licence est offert \'ab\loch\f41 \hich\f41 tel quel \'bb\loch\f41 \hich\f41 . Toute utilisation de ce logiciel est \'e0\loch\f41 \hich\f41 votre seule risque et p\'e9\loch\f41 ril. Microsoft n +\hich\f41 \rquote \loch\f41 \hich\f41 accorde aucune autre garantie expresse. Vous pouvez b\'e9\loch\f41 \hich\f41 n\'e9\loch\f41 ficier de droits additionnels en vertu \hich\af41\dbch\af13\loch\f41 \hich\f41 +du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualit\'e9\loch\f41 marchande, d\hich\f41 \rquote \loch\f41 \hich\f41 ad\'e9\loch\f41 +\hich\f41 quation \'e0\loch\f41 un usage particulier et d\hich\f41 \rquote \loch\f41 \hich\f41 absence de contrefa\'e7\loch\f41 on sont exclues. +\par }{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 \hich\f41 LIMITATION DES DOMMAGES-INT\'c9\loch\f41 \hich\f41 R\'ca\loch\f41 \hich\f41 +TS ET EXCLUSION DE RESPONSABILIT\'c9\loch\f41 POUR LES DOMMAGES.}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 \hich\f41 + Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement \'e0\loch\f41 \hich\f41 hauteur de 5,00 $ US. Vous ne pouvez pr\'e9\loch\f41 \hich\f41 tendre \'e0\loch\f41 aucune in +\hich\af41\dbch\af13\loch\f41 \hich\f41 demnisation pour les autres dommages, y compris les dommages sp\'e9\loch\f41 \hich\f41 ciaux, indirects ou accessoires et pertes de b\'e9\loch\f41 \hich\f41 n\'e9\loch\f41 fices. +\par }{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 Cette limitation concerne : +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\loch\af3\hich\af3\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard \ltrpar +\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0\pararsid15014299 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 +\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 \hich\f41 tout ce qui est reli\'e9\loch\f41 au logiciel, aux services ou au contenu (y compris le code) figurant sur d +\hich\af41\dbch\af13\loch\f41 es sites Internet tiers ou dans des programmes tiers ; et +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\loch\af3\hich\af3\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 \hich\f41 les r\'e9 +\loch\f41 \hich\f41 clamations au titre de violation de contrat ou de garantie, ou au titre de responsabilit\'e9\loch\f41 \hich\f41 stricte, de n\'e9\loch\f41 gligence ou d\hich\f41 \rquote \loch\f41 \hich\f41 une autre faute dans la limite autoris\'e9 +\loch\f41 e par la loi en vigueur. +\par }\pard \ltrpar\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 +\hich\af41\dbch\af13\loch\f41 Elle s\hich\f41 \rquote \hich\af41\dbch\af13\loch\f41 \hich\f41 applique \'e9\loch\f41 \hich\f41 galement, m\'ea\loch\f41 \hich\f41 me si Microsoft connaissait ou devrait conna\'ee\loch\f41 tre l\hich\f41 \rquote \'e9 +\loch\f41 \hich\f41 ventualit\'e9\loch\f41 d\hich\f41 \rquote \loch\f41 un tel dommage. Si votre pays n\hich\f41 \rquote \loch\f41 autorise pas l\hich\f41 \rquote \loch\f41 \hich\f41 exclusion ou la limitation de responsabilit\'e9\loch\f41 + pour les dommages indirects, accessoires ou de quelque nature que ce soit, i\hich\af41\dbch\af13\loch\f41 l\hich\af41\dbch\af13\loch\f41 se peut que la limitation ou l\hich\f41 \rquote \loch\f41 exclusion ci-dessus ne s\hich\f41 \rquote \loch\f41 +\hich\f41 appliquera pas \'e0\loch\f41 \hich\f41 votre \'e9\loch\f41 gard. +\par }\pard\plain \ltrpar\s37\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 EFFET JURIDIQUE.}{ +\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 \hich\f41 Le pr\'e9\loch\f41 \hich\f41 sent contrat d\'e9\loch\f41 +crit certains droits juridiques. Vous pourriez avoir d\hich\f41 \rquote \loch\f41 \hich\f41 autres droits pr\'e9\loch\f41 \hich\f41 vus par les lois de votre pays. Le pr\'e9\loch\f41 sent contrat ne modif\hich\af41\dbch\af13\loch\f41 \hich\f41 +ie pas les droits que vous conf\'e8\loch\f41 rent les lois de votre pays si celles-ci ne le permettent pas}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299 .}{\rtlch\fcs1 \af41 \ltrch\fcs0 +\insrsid4000782 +\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a +9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad +5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 +b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 +0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 +a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f +c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 +0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 +a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 +6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b +4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b +4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210030dd4329a8060000a41b0000160000007468656d652f7468656d652f +7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87 +615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad +79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b +5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab +999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9 +699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586 +8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6 +0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f +9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be +15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979 +3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d +32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a +f074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86 +e877f0034e16bafb0e258ebb4faf06b769e888340b103d331115bebc4eb813bf83291b63624a0d1475a756c734f9bbc2cd28546ecbe1e20a3794ca175f3fae90 +fb6d2dd99bb07b55e5ccf68942bd0877b23c77b908e8db5f9db7f024d9239010f35bd4bbe2fcae387bfff9e2bc289f2fbe24cfaa301468dd8bd846dbb4ddf1c2 +ae7b4c191ba8292337a469bc25ec3d411f06f53a73e224c5292c8de0516732307070a1c0660d125c7d44553488700a4d7bddd3444299910e254ab984c3a219ae +a4adf1d0f82b7bd46cea4388ad1c12ab5d1ed8e1153d9c9f350a3246aad01c6873462b9ac05999ad5cc988826eafc3acae853a33b7ba11cd1445875ba1b236b1 +399483c90bd560b0b0263435085a21b0f22a9cf9356b38ec6046026d77eba3dc2dc60b17e92219e180643ed27acffba86e9c94c7ca9c225a0f1b0cfae0788ad5 +4adc5a9aec1b703b8b93caec1a0bd8e5de7b132fe5113cf312503b998e2c2927274bd051db6b35979b1ef271daf6c6704e86c73805af4bdd476216c26593af84 +0dfb5393d964f9cc9bad5c313709ea70f561ed3ea7b053075221d51696910d0d339585004b34272bff7213cc7a510a5454a3b349b1b206c1f0af490176745d4b +c663e2abb2b34b23da76f6352ba57ca2881844c1111ab189d8c7e07e1daaa04f40255c77988aa05fe06e4e5bdb4cb9c5394bbaf28d98c1d971ccd20867e556a7 +689ec9166e0a522183792b8907ba55ca6e943bbf2a26e52f48957218ffcf54d1fb09dc3eac04da033e5c0d0b8c74a6b43d2e54c4a10aa511f5fb021a07533b20 +5ae07e17a621a8e082dafc17e450ffb739676998b48643a4daa7211214f623150942f6a02c99e83b85583ddbbb2c4996113211551257a656ec1139246ca86be0 +aadedb3d1441a89b6a929501833b197fee7b9641a3503739e57c732a59b1f7da1cf8a73b1f9bcca0945b874d4393dbbf10b1680f66bbaa5d6f96e77b6f59113d +316bb31a795600b3d256d0cad2fe354538e7566b2bd69cc6cbcd5c38f0e2bcc63058344429dc2121fd07f63f2a7c66bf76e80d75c8f7a1b622f878a18941d840 +545fb28d07d205d20e8ea071b283369834296bdaac75d256cb37eb0bee740bbe278cad253b8bbfcf69eca23973d939b97891c6ce2cecd8da8e2d343578f6648a +c2d0383fc818c798cf64e52f597c740f1cbd05df0c264c49134cf09d4a60e8a107260f20f92d47b374e32f000000ffff0300504b030414000600080000002100 +0dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f7 +8277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89 +d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd500 +1996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0f +bfff0000001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6 +a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a +0000001c00000000000000000000000000190200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021 +0030dd4329a8060000a41b00001600000000000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d001400060008 +00000021000dd1909fb60000001b0100002700000000000000000000000000b20900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000ad0a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax371\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdlocked0 heading 1; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 2;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 3;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 4; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 5;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 6;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 7; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 8;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 6; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 9;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote text; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 header;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footer;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index heading; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of figures;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope address; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope return;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 line number; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 page number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of authorities; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 macro;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 toa heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Closing;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Signature; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 5; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Message Header;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Note Heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Block Text; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 FollowedHyperlink;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Document Map;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Plain Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 E-mail Signature;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Top of Form; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal (Web);\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Acronym;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Address; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Cite;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Code;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Definition;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Keyboard; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Sample;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Typewriter;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority59 \lsdlocked0 Table Grid;\lsdsemihidden1 \lsdlocked0 Placeholder Text;\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; +\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid;\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdpriority65 \lsdlocked0 Medium List 1; +\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List;\lsdpriority71 \lsdlocked0 Colorful Shading; +\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdpriority62 \lsdlocked0 Light Grid Accent 1; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdsemihidden1 \lsdlocked0 Revision;\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph; +\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; +\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1; +\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2; +\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; +\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdpriority60 \lsdlocked0 Light Shading Accent 3; +\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3; +\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdpriority70 \lsdlocked0 Dark List Accent 3; +\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdpriority61 \lsdlocked0 Light List Accent 4; +\lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; +\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdpriority62 \lsdlocked0 Light Grid Accent 5; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5; +\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6; +\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; +\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0 Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0 Plain Table 4; +\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0 Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0 Grid Table 4; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 1; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2; +\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4; +\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 4; +\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6; +\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List Table 3 Accent 1; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent 2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3; +\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 3; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4; +\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4; +\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2 Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent 6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 6;}}{\*\datastore 010500000200000018000000 +4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000409a +6c7cba25ce01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/Microsoft.Bcl.Build.1.0.10.nupkg b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/Microsoft.Bcl.Build.1.0.10.nupkg new file mode 100644 index 0000000..7d62435 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/Microsoft.Bcl.Build.1.0.10.nupkg differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/Microsoft.Bcl.Build.1.0.10.nuspec b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/Microsoft.Bcl.Build.1.0.10.nuspec new file mode 100644 index 0000000..daf40d1 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/Microsoft.Bcl.Build.1.0.10.nuspec @@ -0,0 +1,21 @@ + + + + Microsoft.Bcl.Build + 1.0.10 + Microsoft BCL Build Components + Microsoft + Microsoft + http://go.microsoft.com/fwlink/?LinkID=296407 + http://go.microsoft.com/fwlink/?LinkID=296436 + http://go.microsoft.com/fwlink/?LinkID=288859 + true + This package provides build infrastructure components so that projects referencing specific Microsoft packages can successfully build. +Do not directly reference this packages unless you receive a build warning that instructs you to add a reference. + Provides build infrastructure components for Microsoft packages. + + Copyright © Microsoft Corporation + + BCL Microsoft System + + \ No newline at end of file diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/net40/_._ b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/net40/_._ new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/netcore45/_._ b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/netcore45/_._ new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/portable-net40+win8+sl4+wp71/_._ b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/portable-net40+win8+sl4+wp71/_._ new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/sl4-windowsphone71/_._ b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/sl4-windowsphone71/_._ new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/sl4/_._ b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/content/sl4/_._ new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Install.ps1 b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Install.ps1 new file mode 100644 index 0000000..8dd9d2e --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Install.ps1 @@ -0,0 +1,37 @@ +param($installPath, $toolsPath, $package, $project) + # This is the MSBuild targets file to add + $targetsFile = [System.IO.Path]::Combine($toolsPath, $package.Id + '.targets') + + # Need to load MSBuild assembly if it's not loaded yet. + Add-Type -AssemblyName 'Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' + + # Grab the loaded MSBuild project for the project + $msbuild = [Microsoft.Build.Evaluation.ProjectCollection]::GlobalProjectCollection.GetLoadedProjects($project.FullName) | Select-Object -First 1 + + # Make the path to the targets file relative. + $projectUri = new-object Uri($project.FullName, [System.UriKind]::Absolute) + $targetUri = new-object Uri($targetsFile, [System.UriKind]::Absolute) + $relativePath = [System.Uri]::UnescapeDataString($projectUri.MakeRelativeUri($targetUri).ToString()).Replace([System.IO.Path]::AltDirectorySeparatorChar, [System.IO.Path]::DirectorySeparatorChar) + + # Add the import with a condition, to allow the project to load without the targets present. + $import = $msbuild.Xml.AddImport($relativePath) + $import.Condition = "Exists('$relativePath')" + + # Add a target to fail the build when our targets are not imported + $target = $msbuild.Xml.AddTarget("EnsureBclBuildImported") + $target.BeforeTargets = "BeforeBuild" + $target.Condition = "'`$(BclBuildImported)' == ''" + + # if the targets don't exist at the time the target runs, package restore didn't run + $errorTask = $target.AddTask("Error") + $errorTask.Condition = "!Exists('$relativePath')" + $errorTask.SetParameter("Text", "This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=317567."); + $errorTask.SetParameter("HelpKeyword", "BCLBUILD2001"); + + # if the targets exist at the time the target runs, package restore ran but the build didn't import the targets. + $errorTask = $target.AddTask("Error") + $errorTask.Condition = "Exists('$relativePath')" + $errorTask.SetParameter("Text", "The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568."); + $errorTask.SetParameter("HelpKeyword", "BCLBUILD2002"); + + $project.Save() \ No newline at end of file diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Microsoft.Bcl.Build.targets b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Microsoft.Bcl.Build.targets new file mode 100644 index 0000000..a14b3ea --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Microsoft.Bcl.Build.targets @@ -0,0 +1,232 @@ + + + + true + + + + + false + + + $(ProjectConfigFileName) + + + + + + <_FullFrameworkReferenceAssemblyPaths>$(TargetFrameworkDirectory) + + + + + + <__IntermediateAppConfig>$(IntermediateOutputPath)$(MSBuildProjectFile).App.config + + true + + + + + + + + + <_EnsureBindingRedirectReference Include="@(Reference)" + Condition="'%(Reference.HintPath)' != '' and Exists('$([System.IO.Path]::GetDirectoryName("%(Reference.HintPath)"))\\ensureRedirect.xml')" /> + + + + + + + + + + + + + + + $(__IntermediateAppConfig) + + + + + $(TargetFileName).config + + + + + + + + + + + <_BclBuildProjectReferenceProperties>BclBuildReferencingProject=$(MSBuildProjectFullPath);BclBuildReferencingProjectConfig=$(MSBuildProjectDirectory)\packages.config + <_BclBuildProjectReferenceProperties Condition="'$(SkipValidatePackageReferences)' != ''">$(_BclBuildProjectReferenceProperties);SkipValidatePackageReferences=$(SkipValidatePackageReferences) + + + + + $(_BclBuildProjectReferenceProperties);%(ProjectReference.AdditionalProperties) + + + + + + + + true + + + + + + + + + + false + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Uninstall.ps1 b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Uninstall.ps1 new file mode 100644 index 0000000..204e4cc --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.10/tools/Uninstall.ps1 @@ -0,0 +1,25 @@ +param($installPath, $toolsPath, $package, $project) + + # Need to load MSBuild assembly if it's not loaded yet. + Add-Type -AssemblyName 'Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' + + # Grab the loaded MSBuild project for the project + $msbuild = [Microsoft.Build.Evaluation.ProjectCollection]::GlobalProjectCollection.GetLoadedProjects($project.FullName) | Select-Object -First 1 + + # Find all the imports and targets added by this package. + $itemsToRemove = @() + + # Allow many in case a past package was incorrectly uninstalled + $itemsToRemove += $msbuild.Xml.Imports | Where-Object { $_.Project.EndsWith($package.Id + '.targets') } + $itemsToRemove += $msbuild.Xml.Targets | Where-Object { $_.Name -eq "EnsureBclBuildImported" } + + # Remove the elements and save the project + if ($itemsToRemove -and $itemsToRemove.length) + { + foreach ($itemToRemove in $itemsToRemove) + { + $msbuild.Xml.RemoveChild($itemToRemove) | out-null + } + + $project.Save() + } \ No newline at end of file diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/License.rtf b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/License.rtf new file mode 100644 index 0000000..350fcf6 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/License.rtf @@ -0,0 +1,505 @@ +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff41\deff0\stshfdbch0\stshfloch31506\stshfhich31506\stshfbi31506\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs1025{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} +{\f3\fbidi \froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f10\fbidi \fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;} +{\f11\fbidi \fmodern\fcharset128\fprq1{\*\panose 02020609040205080304}MS Mincho{\*\falt ?l?r ??\'81\'66c};}{\f13\fbidi \fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt ???\'a1\'ec??};} +{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 00000000000000000000}Cambria Math;}{\f40\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0603020202020204}Trebuchet MS{\*\falt Arial};} +{\f41\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma{\*\falt ?? ??};}{\f42\fbidi \fnil\fcharset134\fprq2{\*\panose 00000000000000000000}@SimSun;}{\f43\fbidi \fmodern\fcharset128\fprq1{\*\panose 00000000000000000000}@MS Mincho;} +{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 00000000000000000000}Cambria;}{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\fbiminor\f31507\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}{\f46\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\f47\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\f49\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f50\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f51\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\f52\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f53\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f54\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f66\fbidi \fmodern\fcharset238\fprq1 Courier New CE;} +{\f67\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;}{\f69\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f70\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f71\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);} +{\f72\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);}{\f73\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f74\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);} +{\f158\fbidi \fmodern\fcharset0\fprq1 MS Mincho Western{\*\falt ?l?r ??\'81\'66c};}{\f156\fbidi \fmodern\fcharset238\fprq1 MS Mincho CE{\*\falt ?l?r ??\'81\'66c};}{\f157\fbidi \fmodern\fcharset204\fprq1 MS Mincho Cyr{\*\falt ?l?r ??\'81\'66c};} +{\f159\fbidi \fmodern\fcharset161\fprq1 MS Mincho Greek{\*\falt ?l?r ??\'81\'66c};}{\f160\fbidi \fmodern\fcharset162\fprq1 MS Mincho Tur{\*\falt ?l?r ??\'81\'66c};}{\f163\fbidi \fmodern\fcharset186\fprq1 MS Mincho Baltic{\*\falt ?l?r ??\'81\'66c};} +{\f178\fbidi \fnil\fcharset0\fprq2 SimSun Western{\*\falt ???\'a1\'ec??};}{\f386\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f387\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;}{\f389\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;} +{\f390\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f393\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f394\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);}{\f446\fbidi \fswiss\fcharset238\fprq2 Trebuchet MS CE{\*\falt Arial};} +{\f447\fbidi \fswiss\fcharset204\fprq2 Trebuchet MS Cyr{\*\falt Arial};}{\f449\fbidi \fswiss\fcharset161\fprq2 Trebuchet MS Greek{\*\falt Arial};}{\f450\fbidi \fswiss\fcharset162\fprq2 Trebuchet MS Tur{\*\falt Arial};} +{\f453\fbidi \fswiss\fcharset186\fprq2 Trebuchet MS Baltic{\*\falt Arial};}{\f456\fbidi \fswiss\fcharset238\fprq2 Tahoma CE{\*\falt ?? ??};}{\f457\fbidi \fswiss\fcharset204\fprq2 Tahoma Cyr{\*\falt ?? ??};} +{\f459\fbidi \fswiss\fcharset161\fprq2 Tahoma Greek{\*\falt ?? ??};}{\f460\fbidi \fswiss\fcharset162\fprq2 Tahoma Tur{\*\falt ?? ??};}{\f461\fbidi \fswiss\fcharset177\fprq2 Tahoma (Hebrew){\*\falt ?? ??};} +{\f462\fbidi \fswiss\fcharset178\fprq2 Tahoma (Arabic){\*\falt ?? ??};}{\f463\fbidi \fswiss\fcharset186\fprq2 Tahoma Baltic{\*\falt ?? ??};}{\f464\fbidi \fswiss\fcharset163\fprq2 Tahoma (Vietnamese){\*\falt ?? ??};} +{\f465\fbidi \fswiss\fcharset222\fprq2 Tahoma (Thai){\*\falt ?? ??};}{\f468\fbidi \fnil\fcharset0\fprq2 @SimSun Western;}{\f478\fbidi \fmodern\fcharset0\fprq1 @MS Mincho Western;}{\f476\fbidi \fmodern\fcharset238\fprq1 @MS Mincho CE;} +{\f477\fbidi \fmodern\fcharset204\fprq1 @MS Mincho Cyr;}{\f479\fbidi \fmodern\fcharset161\fprq1 @MS Mincho Greek;}{\f480\fbidi \fmodern\fcharset162\fprq1 @MS Mincho Tur;}{\f483\fbidi \fmodern\fcharset186\fprq1 @MS Mincho Baltic;} +{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;} +{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;} +{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;} +{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} +{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \fswiss\fcharset238\fprq2 Arial CE;}{\fbiminor\f31579\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;} +{\fbiminor\f31581\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\fbiminor\f31582\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\fbiminor\f31583\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);} +{\fbiminor\f31584\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);}{\fbiminor\f31585\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\fbiminor\f31586\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255; +\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0; +\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\ctextone\ctint255\cshade255\red0\green0\blue0;}{\*\defchp \f31506\fs22 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \snext0 \sautoupd \sqformat \spriority0 \styrsid15686224 Normal;}{\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext1 \slink15 \sqformat \styrsid15686224 heading 1;}{\s2\ql \fi-363\li720\ri0\sb120\sa120\widctlpar\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0 \rtlch\fcs1 +\ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext2 \slink16 \sqformat \styrsid15686224 heading 2;}{\s3\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\tx1077\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext3 \slink17 \sqformat \styrsid15686224 heading 3;}{\s4\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl3\outlinelevel3\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 +\af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext4 \slink18 \sqformat \styrsid15686224 heading 4;}{\s5\ql \fi-357\li1792\ri0\sb120\sa120\widctlpar +\tx1792\jclisttab\tx2155\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl4\outlinelevel4\adjustright\rin0\lin1792\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext5 \slink19 \sqformat \styrsid15686224 heading 5;}{\s6\ql \fi-357\li2149\ri0\sb120\sa120\widctlpar\jclisttab\tx2152\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl5\outlinelevel5\adjustright\rin0\lin2149\itap0 \rtlch\fcs1 +\af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext6 \slink20 \sqformat \styrsid15686224 heading 6;}{\s7\ql \fi-357\li2506\ri0\sb120\sa120\widctlpar +\jclisttab\tx2509\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl6\outlinelevel6\adjustright\rin0\lin2506\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext7 \slink21 \sqformat \styrsid15686224 heading 7;}{\s8\ql \fi-357\li2863\ri0\sb120\sa120\widctlpar\jclisttab\tx2866\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl7\outlinelevel7\adjustright\rin0\lin2863\itap0 \rtlch\fcs1 +\af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext8 \slink22 \sqformat \styrsid15686224 heading 8;}{\s9\ql \fi-358\li3221\ri0\sb120\sa120\widctlpar +\jclisttab\tx3223\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl8\outlinelevel8\adjustright\rin0\lin3221\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext9 \slink23 \sqformat \styrsid15686224 heading 9;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31506\afs22\alang1025 \ltrch\fcs0 \f31506\fs22\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused Normal Table;}{\*\cs15 \additive +\rtlch\fcs1 \ab\af41\afs19 \ltrch\fcs0 \b\fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink1 \slocked \styrsid15686224 Heading 1 Char;}{\*\cs16 \additive \rtlch\fcs1 \ab\af41\afs19 \ltrch\fcs0 \b\fs19\loch\f41\hich\af41\dbch\af11 +\sbasedon10 \slink2 \slocked \styrsid15686224 Heading 2 Char;}{\*\cs17 \additive \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink3 \slocked \styrsid15686224 Heading 3 Char;}{\*\cs18 \additive \rtlch\fcs1 +\af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink4 \slocked \styrsid15686224 Heading 4 Char;}{\*\cs19 \additive \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 +\sbasedon10 \slink5 \slocked \styrsid15686224 Heading 5 Char;}{\*\cs20 \additive \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink6 \slocked \styrsid15686224 Heading 6 Char;}{\*\cs21 \additive \rtlch\fcs1 +\af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink7 \slocked \styrsid15686224 Heading 7 Char;}{\*\cs22 \additive \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 +\sbasedon10 \slink8 \slocked \styrsid15686224 Heading 8 Char;}{\*\cs23 \additive \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink9 \slocked \styrsid15686224 Heading 9 Char;}{ +\s24\ql \li357\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext24 \styrsid15686224 Body 1;}{\s25\ql \fi-363\li720\ri0\sb120\sa120\widctlpar\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext25 \styrsid15686224 Bullet 2;}{\s26\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar +\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext26 \styrsid15686224 Bullet 4;}{\s27\ql \fi-357\li1792\ri0\sb120\sa120\widctlpar\jclisttab\tx1795\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin1792\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext27 \styrsid15686224 Bullet 5;}{\s28\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\ab\af41\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \styrsid15686224 Heading EULA;}{\s29\ql \li0\ri0\sb120\sa120\widctlpar\brdrb\brdrs\brdrw10\brsp20 +\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af41\afs28\alang1025 \ltrch\fcs0 \b\fs28\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext0 \styrsid15686224 +Heading Software Title;}{\s30\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext30 \styrsid15686224 Preamble;}{\s31\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\tx1077\jclisttab\tx1440\wrapdefault\aspalpha\aspnum\faauto\ls4\ilvl2\outlinelevel2\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon3 \snext31 \slink38 \styrsid15686224 Heading 3 Bold;}{\s32\ql \fi-358\li1435\ri0\sb120\sa120\widctlpar\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls2\adjustright\rin0\lin1435\itap0 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\ul\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon26 \snext32 \styrsid15686224 Bullet 4 Underline;}{\*\cs33 \additive \rtlch\fcs1 \af41 \ltrch\fcs0 \f41\lang1033\langfe1033\langnp1033\langfenp1033 +\sbasedon10 \styrsid15686224 Body 2 Char;}{\*\cs34 \additive \rtlch\fcs1 \af41 \ltrch\fcs0 \f41\lang1033\langfe1033\langnp1033\langfenp1033 \sbasedon10 \styrsid15686224 Body 3 Char;}{\s35\ql \li0\ri0\sb120\sa120\widctlpar\brdrt\brdrs\brdrw10\brsp20 +\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon30 \snext35 \styrsid15686224 +Preamble Border Above;}{\*\cs36 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf2 \sbasedon10 \styrsid15686224 Hyperlink,Char Char7;}{\s37\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 +\ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \snext0 \slink39 \styrsid15686224 Body 0 Bold;}{\*\cs38 \additive \rtlch\fcs1 \ab\af41\afs19 \ltrch\fcs0 +\b\fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink31 \slocked \styrsid15686224 Heading 3 Bold Char;}{\*\cs39 \additive \rtlch\fcs1 \ab\af41\afs19 \ltrch\fcs0 \b\fs19\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink37 \slocked \styrsid15686224 +Body 0 Bold Char;}{\*\cs40 \additive \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \f41\fs20 \sbasedon10 \slink41 \slocked \styrsid15686224 Bullet 3 Char1;}{\s41\ql \fi-357\li1077\ri0\sb120\sa120\widctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \f41\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext41 \slink40 \styrsid15686224 Bullet 3;}{ +\s42\ql \fi-357\li357\ri0\sb120\sa120\widctlpar\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin357\itap0 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \f41\fs20\ul\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 +\sbasedon41 \snext42 \sautoupd \styrsid15686224 Bullet 3 Underline;}{\s43\ql \li0\ri0\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs16\alang1025 \ltrch\fcs0 +\fs16\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon0 \snext43 \slink44 \ssemihidden \sunhideused \styrsid3699522 Balloon Text;}{\*\cs44 \additive \rtlch\fcs1 \af41\afs16 \ltrch\fcs0 +\fs16\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink43 \slocked \ssemihidden \styrsid3699522 Balloon Text Char;}{\*\cs45 \additive \rtlch\fcs1 \af0\afs16 \ltrch\fcs0 \fs16 \sbasedon10 \ssemihidden \sunhideused \styrsid3699522 annotation reference;}{ +\s46\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \fs20\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 +\sbasedon0 \snext46 \slink47 \ssemihidden \sunhideused \styrsid3699522 annotation text;}{\*\cs47 \additive \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\f41\hich\af41\dbch\af11 \sbasedon10 \slink46 \slocked \ssemihidden \styrsid3699522 +Comment Text Char;}{\s48\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \ab\af41\afs20\alang1025 \ltrch\fcs0 +\b\fs20\lang1033\langfe1033\loch\f41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 \sbasedon46 \snext46 \slink49 \ssemihidden \sunhideused \styrsid3699522 annotation subject;}{\*\cs49 \additive \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 +\b\fs20\loch\f41\hich\af41\dbch\af11 \sbasedon47 \slink48 \slocked \ssemihidden \styrsid3699522 Comment Subject Char;}}{\*\listtable{\list\listtemplateid1928476992{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'00.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\fbias0 \fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'01.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af40\afs20 \ltrch\fcs0 \b\i0\f40\fs20\fbias0 \fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'02.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab\ai0\af41\afs20 \ltrch\fcs0 \b\i0\f41\fs20\fbias0 \s31\fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'03.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\strike0\f40\fs20\ulnone\fbias0 \fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\strike0\f40\fs20\ulnone\fbias0 \fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid398796681} +{\list\listtemplateid789093748\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-317712510\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s25\fi-363\li720 +\jclisttab\tx720\lin720 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23 +\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691 +\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;} +\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid477573462}{\list\listtemplateid1904874988{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'00.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af41\afs20 \ltrch\fcs0 \b\i0\f41\fs20\cf0\fbias0 \s1\fi-357\li357\jclisttab\tx360\lin357 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'01.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af41\afs20 \ltrch\fcs0 \b\i0\f41\fs20\fbias0 \s2\fi-363\li720\jclisttab\tx720\lin720 }{\listlevel\levelnfc2\levelnfcn2\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'02.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab\ai0\af41\afs20 \ltrch\fcs0 \b\i0\f41\fs20\fbias0 \s3\fi-357\li1077\jclisttab\tx1440\lin1077 }{\listlevel\levelnfc3\levelnfcn3\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'02\'03.;}{\levelnumbers +\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\strike0\f40\fs20\ulnone\fbias0 \s4\fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc1\levelnfcn1\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'02\'04.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\strike0\f40\fs20\ulnone\fbias0 \s5\fi-357\li1792\jclisttab\tx2155\lin1792 }{\listlevel\levelnfc0\levelnfcn0\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\'02\'05.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \s6\fi-357\li2149\jclisttab\tx2152\lin2149 }{\listlevel\levelnfc4\levelnfcn4\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\'02\'06.;}{\levelnumbers\'01;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \s7\fi-357\li2506\jclisttab\tx2509\lin2506 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02i.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \s8\fi-357\li2863\jclisttab\tx2866\lin2863 }{\listlevel\levelnfc255\levelnfcn255\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'02A.;}{\levelnumbers;}\rtlch\fcs1 \ab0\ai0\af40\afs20 \ltrch\fcs0 \b0\i0\f40\fs20\fbias0 \s9\fi-358\li3221\jclisttab\tx3223\lin3221 }{\listname ;}\listid752163927}{\list\listtemplateid285099256 +\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-308626962\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s42\fi-357\li1077\jclisttab\tx1080\lin1077 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0 +\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0 +\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689 +\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;} +\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480 +\jclisttab\tx6480\lin6480 }{\listname ;}\listid1121073746}{\list\listtemplateid303218272\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid612407812 +\'01\u-3913 ?;}{\levelnumbers;}\f3\cf17\fbias0 \s26\fi-358\li1435\jclisttab\tx1437\lin1435 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 +\fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel +\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0 +\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 +\fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1559511898}{\list\listtemplateid-743794326\listhybrid +{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid1229593488\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \s41\fi-357\li1077\jclisttab\tx1080\lin1077 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;} +\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760 +\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 } +{\listname ;}\listid1567649130}{\list\listtemplateid-961874242\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid-1175557160\'01\u-3913 ?;}{\levelnumbers;} +\f3\fbias0 \s27\fi-357\li1792\jclisttab\tx1795\lin1792 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li1440 +\jclisttab\tx1440\lin1440 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2160\jclisttab\tx2160\lin2160 } +{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li2880\jclisttab\tx2880\lin2880 }{\listlevel\levelnfc23 +\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li3600\jclisttab\tx3600\lin3600 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0 +\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li4320\jclisttab\tx4320\lin4320 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1 +\levelspace0\levelindent0{\leveltext\leveltemplateid67698689\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-360\li5040\jclisttab\tx5040\lin5040 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0 +{\leveltext\leveltemplateid67698691\'01o;}{\levelnumbers;}\f2\fbias0 \fi-360\li5760\jclisttab\tx5760\lin5760 }{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace0\levelindent0{\leveltext\leveltemplateid67698693 +\'01\u-3929 ?;}{\levelnumbers;}\f10\fbias0 \fi-360\li6480\jclisttab\tx6480\lin6480 }{\listname ;}\listid1848404271}}{\*\listoverridetable{\listoverride\listid477573462\listoverridecount0\ls1}{\listoverride\listid1559511898\listoverridecount0\ls2} +{\listoverride\listid1848404271\listoverridecount0\ls3}{\listoverride\listid398796681\listoverridecount0\ls4}{\listoverride\listid752163927\listoverridecount0\ls5}{\listoverride\listid398796681\listoverridecount9{\lfolevel\listoverridestartat +\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel +\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}{\lfolevel\listoverridestartat\levelstartat1}\ls6}{\listoverride\listid1567649130\listoverridecount0\ls7}{\listoverride\listid1559511898\listoverridecount0\ls8} +{\listoverride\listid1121073746\listoverridecount0\ls9}{\listoverride\listid752163927\listoverridecount0\ls10}}{\*\pgptbl {\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp5\itap0\li0\ri0\sb0\sa300}{\pgp\ipgp2\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp0\itap0\li0\ri0\sb0 +\sa0}{\pgp\ipgp7\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp1\itap0\li0\ri0\sb0\sa0}{\pgp\ipgp6\itap0\li0\ri0\sb0\sa0}}{\*\rsidtbl \rsid874403\rsid1473980\rsid2177578\rsid2693076\rsid3699522\rsid4000782\rsid4423363\rsid6097754\rsid7214391\rsid8995160\rsid12062545 +\rsid13846008\rsid14566738\rsid14751308\rsid15014299\rsid15467703\rsid15686224\rsid15928942\rsid15934954}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\author kathan} +{\operator Alok Shriram}{\creatim\yr2013\mo3\dy20\hr15\min24}{\revtim\yr2013\mo3\dy20\hr15\min30}{\version4}{\edmins1}{\nofpages4}{\nofwords1340}{\nofchars7643}{\*\company Microsoft Corporation}{\nofcharsws8966}{\vern57427}}{\*\xmlnstbl {\xmlns1 http://sc +hemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect +\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont1\relyonvml0\donotembedlingdata0\grfdocevents0\validatexml1\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors1\noxlattoyen +\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1440\dgvorigin1440\dghshow1\dgvshow1 +\jexpand\viewkind1\viewscale100\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct +\asianbrkrule\rsidroot15686224\newtblstyruls\nogrowautofit\usenormstyforlist\noindnmbrts\felnbrelev\nocxsptable\indrlsweleven\noafcnsttbl\afelev\utinl\hwelev\spltpgpar\notcvasp\notbrkcnstfrctbl\notvatxbx\krnprsnet\cachedcolbal \nouicompat \fet0 +{\*\wgrffmtfilter 2450}\nofeaturethrottle1\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang +{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang +{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}} +\pard\plain \ltrpar\s28\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs28\alang1025 \ltrch\fcs0 +\b\fs28\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 MICROSOFT SOFTWARE LICENSE TERMS +\par }\pard\plain \ltrpar\ql \li0\ri0\sb120\sa120\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid14566738 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224\charrsid7214391 \hich\af41\dbch\af13\loch\f41 MICROSOFT }{\rtlch\fcs1 \ab\af41\afs20 +\ltrch\fcs0 \b\fs20\dbch\af13\insrsid13846008 \hich\af41\dbch\af13\loch\f41 BCL Build Component}{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid14566738 \hich\af41\dbch\af13\loch\f41 .dll }{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 +\b\fs20\dbch\af13\insrsid7214391\charrsid7214391 \hich\af41\dbch\af13\loch\f41 PACKAGE}{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224\charrsid7214391 \hich\af41\dbch\af13\loch\f41 }{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 +\b\fs20\dbch\af13\insrsid14751308\charrsid7214391 +\par }\pard\plain \ltrpar\s29\ql \li0\ri0\sb120\sa120\nowidctlpar\brdrb\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs28\alang1025 \ltrch\fcs0 +\b\fs28\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\par }\pard\plain \ltrpar\s30\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 +These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. Please read them. They apply to the software named above, which includes the media on which you received it, if any. The terms +\hich\af41\dbch\af13\loch\f41 a\hich\af41\dbch\af13\loch\f41 lso apply to any Microsoft +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 updates, +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 supplements, +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 Internet-based services, and +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 support services +\par }\pard\plain \ltrpar\s30\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 +for this software, unless other terms accompany those items. If so, those terms apply. +\par }{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS. IF YOU DO NOT ACCEP\hich\af41\dbch\af13\loch\f41 T THEM, DO NOT USE THE SOFTWARE. +\par }\pard\plain \ltrpar\s35\ql \li0\ri0\sb120\sa120\nowidctlpar\brdrt\brdrs\brdrw10\brsp20 \wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\insrsid15686224 \hich\af41\dbch\af11\loch\f41 IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE PERPETUAL RIGHTS BELOW.}{ +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 1.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid14566738 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 INSTALLATION AND USE RIGHTS. }{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14566738 \hich\af41\dbch\af13\loch\f41 You}{\rtlch\fcs1 +\ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14566738\charrsid15934954 \hich\af41\dbch\af13\loch\f41 may install and use any number of copies of the software on your devices to design, develop and test your pr\hich\af41\dbch\af13\loch\f41 ograms +}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid14566738 .}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224\charrsid14566738 \hich\af41\dbch\af13\loch\f41 2.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 +\fs20\dbch\af13\insrsid15686224\charrsid14566738 \hich\af41\dbch\af13\loch\f41 DISTRIBUTABLE CODE. }{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid14566738 \hich\af41\dbch\af13\loch\f41 }{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid15686224\charrsid14566738 \hich\af41\dbch\af13\loch\f41 \hich\f41 The software is comprised of Distributable Code. \'93\loch\f41 \hich\f41 Distributable Code\'94\loch\f41 + is code that you are permitted to distribute in programs you develop if you comply with the terms below. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 a.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 Right to Use and Distribute. +\par {\listtext\pard\plain\ltrpar \s42 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s42\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls9\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \f41\fs20\ul\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 +\ulnone\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 Yo\hich\af41\dbch\af13\loch\f41 u may copy and distribute the object code form of the software. +\par {\listtext\pard\plain\ltrpar \s42 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}{\rtlch\fcs1 \af41 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 +Third Party Distribution}{\rtlch\fcs1 \af41 \ltrch\fcs0 \ulnone\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 . You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 b.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 Distribution Requirements. For any Distribu\hich\af41\dbch\af13\loch\f41 +table Code you distribute, you must +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s41\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \f41\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 +\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 add significant primary functionality to it in your programs; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +for any Distributable Code having a filename extension of .lib, distribute only the results of running such Distributable Code through a linker with your \hich\af41\dbch\af13\loch\f41 program; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +distribute Distributable Code included in a setup program only as part of that setup program without modification; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +require distributors and external end users to agree to terms that protect it at least as much as this agreement; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 display your valid copyright notice on your programs; and +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +indemnify, defend, and hold harmless Microsoft from any claims, including attorneys\hich\f41 \rquote \loch\f41 fees, related to the distribution or use of your programs. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af40\afs20 \ltrch\fcs0 \b\fs20\loch\af40\hich\af40\dbch\af13\insrsid15686224 \hich\af40\dbch\af13\loch\f40 c.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls6\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 Distribution Restrictions. You may not +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s41\ql \fi-357\li1077\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1080\wrapdefault\aspalpha\aspnum\faauto\ls7\adjustright\rin0\lin1077\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs20\alang1025 \ltrch\fcs0 \f41\fs20\lang1033\langfe1033\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41 \ltrch\fcs0 +\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 alter an\hich\af41\dbch\af13\loch\f41 y copyright, trademark or patent notice in the Distributable Code; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 use Microsoft\hich\f41 \rquote \loch\f41 +s trademarks in your programs\hich\f41 \rquote \loch\f41 names or in a way that suggests your programs come from or are endorsed by Microsoft; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 distribute Distributable Code to run on a platform oth +\hich\af41\dbch\af13\loch\f41 er than the Windows platform; +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +include Distributable Code in malicious, deceptive or unlawful programs; or +\par {\listtext\pard\plain\ltrpar \s41 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License. An Excluded License \hich\af41\dbch\af13\loch\f41 is one that requires, as a condition of use, modification or distribution, that + +\par {\listtext\pard\plain\ltrpar \s26 \rtlch\fcs1 \af41\afs19 \ltrch\fcs0 \fs19\cf17\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s26\ql \fi-358\li1435\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1437\wrapdefault\aspalpha\aspnum\faauto\ls8\adjustright\rin0\lin1435\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af41 \ltrch\fcs0 \dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 the code be disclosed or distributed in source code form; or +\par {\listtext\pard\plain\ltrpar \s27 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s27\ql \fi-357\li1792\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx1795\wrapdefault\aspalpha\aspnum\faauto\ls3\adjustright\rin0\lin1792\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 others have the right to modify it. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 3.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 SCOPE OF LICENSE.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + The software is licensed, not sold. This agreement onl\hich\af41\dbch\af13\loch\f41 +y gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply wit +\hich\af41\dbch\af13\loch\f41 h\hich\af41\dbch\af13\loch\f41 any technical limitations in the software that only allow you to use it in certain ways. You may not +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 work around any technical limitations in the software; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +reverse engineer, decompile or disassemble the software, except and only to the extent that app\hich\af41\dbch\af13\loch\f41 licable law expressly permits, despite this limitation; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 publish the software for others to copy; +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 rent, lease or lend the software\hich\af41\dbch\af13\loch\f41 ; + +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 transfer the software or this agreement to any third party; or + +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 use the software for commercial software hosting services. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 4.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 BACKUP COPY.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + You may make one backup copy of the software. You may use it only to reinstall the software. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 5.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af41\dbch\af13\loch\f41 DOCUMENTATION.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 6.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af41\dbch\af13\loch\f41 EXPORT RESTRICTIONS.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 The software is subject to United States export laws and regulations. You must comply w +\hich\af41\dbch\af13\loch\f41 ith all domestic and international export laws and regulations that apply to the software. These laws include restrictions on destinations, end users and end use. For additional information, see }{\rtlch\fcs1 \ab0\af0\afs20 +\ltrch\fcs0 \cs36\b0\fs20\ul\cf2\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 www.microsoft.com/exporting}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 .}{\rtlch\fcs1 \ab0\af0\afs20 \ltrch\fcs0 +\cs36\b0\fs20\ul\cf2\dbch\af13\insrsid15686224 +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 7.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af41\dbch\af13\loch\f41 SUPPORT SERVICES. }{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 Because thi\hich\af41\dbch\af13\loch\f41 \hich\f41 s software is \'93\loch\f41 \hich\f41 as is,\'94 +\loch\f41 we may not provide support services for it. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 8.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af41\dbch\af13\loch\f41 ENTIRE AGREEMENT.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support\hich\af41\dbch\af13\loch\f41 services. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 9.\tab}}\pard \ltrpar\s1\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin360\itap0\pararsid15686224 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 APPLICABLE LAW. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 a.\tab}}\pard\plain \ltrpar\s2\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls5\ilvl1\outlinelevel1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 United States.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 +\b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles. The laws\hich\af41\dbch\af13\loch\f41 + of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort. +\par {\listtext\pard\plain\ltrpar \s2 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 b.\tab}}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 +\hich\af41\dbch\af13\loch\f41 Outside the United States.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 If you acquired the software in any other country, the laws of that country app +\hich\af41\dbch\af13\loch\f41 ly. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 10.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 LEGAL EFFECT.}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 + This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your right +\hich\af41\dbch\af13\loch\f41 s under the laws of your country if the laws of your country do not permit it to do so. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 11.\tab}}\pard \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 \hich\f41 +DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED \'93\loch\f41 \hich\f41 AS-IS.\'94\loch\f41 YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. YOU MAY HA\hich\af41\dbch\af13\loch\f41 +VE ADDITIONAL CONSUMER RIGHTS OR STATUTORY GUARANTEES UNDER YOUR LOCAL LAWS WHICH THIS AGREEMENT CANNOT CHANGE. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE A +\hich\af41\dbch\af13\loch\f41 N\hich\af41\dbch\af13\loch\f41 D NON-INFRINGEMENT. +\par }\pard\plain \ltrpar\s24\ql \li357\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 FOR AUSTRALIA \hich\f41 \endash \loch\f41 + YOU HAVE STATUTORY GUARANTEES UNDER THE AUSTRALIAN CONSUMER LAW AND NOTHING IN THESE TERMS IS INTENDED TO AFFECT THOSE RIGHTS. +\par {\listtext\pard\plain\ltrpar \s1 \rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\loch\af41\hich\af41\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 12.\tab}}\pard\plain \ltrpar\s1\ql \fi-357\li357\ri0\sb120\sa120\widctlpar +\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls5\outlinelevel0\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 \b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 { +\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 LIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\insrsid15686224 \hich\af41\dbch\af11\loch\f41 +. YOU CAN RECOVER FROM MICROSOFT AND I\hich\af41\dbch\af11\loch\f41 TS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. +\par }\pard\plain \ltrpar\s24\ql \li357\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin357\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 This limitation applies to +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard\plain \ltrpar\s25\ql \fi-363\li720\ri0\sb120\sa120\nowidctlpar +\jclisttab\tx720\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin720\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 \fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 +\af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 anything related to the software, services, content (inclu\hich\af41\dbch\af13\loch\f41 ding code) on third party Internet sites, or third party programs; and +\par {\listtext\pard\plain\ltrpar \s25 \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\loch\af3\hich\af3\dbch\af13\insrsid15686224 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 +claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. +\par }\pard\plain \ltrpar\ql \li360\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin360\itap0\pararsid15686224 \rtlch\fcs1 \af41\afs19\alang1025 \ltrch\fcs0 +\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15686224 \hich\af41\dbch\af13\loch\f41 It also applies even \hich\af41\dbch\af13\loch\f41 +if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. +\par }\pard \ltrpar\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 {\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\dbch\af13\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 +Please note: A\hich\af41\dbch\af13\loch\f41 s this software is distributed in Quebec, Canada, some of the clauses in this agreement are provided below in French. +\par }{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299 +\par +\par }{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 \hich\f41 Remarque : Ce logiciel \'e9\loch\f41 \hich\f41 tant distribu\'e9\loch\f41 \hich\f41 au Qu +\'e9\loch\f41 \hich\f41 bec, Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en fran\'e7\loch\f41 ais. +\par \hich\af41\dbch\af13\loch\f41 EX\hich\af41\dbch\af13\loch\f41 \hich\f41 ON\'c9\loch\f41 RATION DE GARANTIE.}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 +\hich\f41 Le logiciel vis\'e9\loch\f41 \hich\f41 par une licence est offert \'ab\loch\f41 \hich\f41 tel quel \'bb\loch\f41 \hich\f41 . Toute utilisation de ce logiciel est \'e0\loch\f41 \hich\f41 votre seule risque et p\'e9\loch\f41 ril. Microsoft n +\hich\f41 \rquote \loch\f41 \hich\f41 accorde aucune autre garantie expresse. Vous pouvez b\'e9\loch\f41 \hich\f41 n\'e9\loch\f41 ficier de droits additionnels en vertu \hich\af41\dbch\af13\loch\f41 \hich\f41 +du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualit\'e9\loch\f41 marchande, d\hich\f41 \rquote \loch\f41 \hich\f41 ad\'e9\loch\f41 +\hich\f41 quation \'e0\loch\f41 un usage particulier et d\hich\f41 \rquote \loch\f41 \hich\f41 absence de contrefa\'e7\loch\f41 on sont exclues. +\par }{\rtlch\fcs1 \ab\af41\afs20 \ltrch\fcs0 \b\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 \hich\f41 LIMITATION DES DOMMAGES-INT\'c9\loch\f41 \hich\f41 R\'ca\loch\f41 \hich\f41 +TS ET EXCLUSION DE RESPONSABILIT\'c9\loch\f41 POUR LES DOMMAGES.}{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 \hich\f41 + Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement \'e0\loch\f41 \hich\f41 hauteur de 5,00 $ US. Vous ne pouvez pr\'e9\loch\f41 \hich\f41 tendre \'e0\loch\f41 aucune in +\hich\af41\dbch\af13\loch\f41 \hich\f41 demnisation pour les autres dommages, y compris les dommages sp\'e9\loch\f41 \hich\f41 ciaux, indirects ou accessoires et pertes de b\'e9\loch\f41 \hich\f41 n\'e9\loch\f41 fices. +\par }{\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\dbch\af13\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 Cette limitation concerne : +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\loch\af3\hich\af3\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \loch\af3\dbch\af13\hich\f3 \'b7\tab}}\pard \ltrpar +\ql \fi-360\li360\ri0\sb120\sa120\nowidctlpar\jclisttab\tx360\wrapdefault\aspalpha\aspnum\faauto\ls1\adjustright\rin0\lin360\itap0\pararsid15014299 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 +\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 \hich\f41 tout ce qui est reli\'e9\loch\f41 au logiciel, aux services ou au contenu (y compris le code) figurant sur d +\hich\af41\dbch\af13\loch\f41 es sites Internet tiers ou dans des programmes tiers ; et +\par {\listtext\pard\plain\ltrpar \rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\loch\af3\hich\af3\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \loch\af3\dbch\af13\hich\f3 \'b7\tab}\hich\af41\dbch\af13\loch\f41 \hich\f41 les r\'e9 +\loch\f41 \hich\f41 clamations au titre de violation de contrat ou de garantie, ou au titre de responsabilit\'e9\loch\f41 \hich\f41 stricte, de n\'e9\loch\f41 gligence ou d\hich\f41 \rquote \loch\f41 \hich\f41 une autre faute dans la limite autoris\'e9 +\loch\f41 e par la loi en vigueur. +\par }\pard \ltrpar\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 +\hich\af41\dbch\af13\loch\f41 Elle s\hich\f41 \rquote \hich\af41\dbch\af13\loch\f41 \hich\f41 applique \'e9\loch\f41 \hich\f41 galement, m\'ea\loch\f41 \hich\f41 me si Microsoft connaissait ou devrait conna\'ee\loch\f41 tre l\hich\f41 \rquote \'e9 +\loch\f41 \hich\f41 ventualit\'e9\loch\f41 d\hich\f41 \rquote \loch\f41 un tel dommage. Si votre pays n\hich\f41 \rquote \loch\f41 autorise pas l\hich\f41 \rquote \loch\f41 \hich\f41 exclusion ou la limitation de responsabilit\'e9\loch\f41 + pour les dommages indirects, accessoires ou de quelque nature que ce soit, i\hich\af41\dbch\af13\loch\f41 l\hich\af41\dbch\af13\loch\f41 se peut que la limitation ou l\hich\f41 \rquote \loch\f41 exclusion ci-dessus ne s\hich\f41 \rquote \loch\f41 +\hich\f41 appliquera pas \'e0\loch\f41 \hich\f41 votre \'e9\loch\f41 gard. +\par }\pard\plain \ltrpar\s37\ql \li0\ri0\sb120\sa120\nowidctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0\pararsid15014299 \rtlch\fcs1 \ab\af41\afs19\alang1025 \ltrch\fcs0 +\b\fs19\lang1033\langfe1033\loch\af41\hich\af41\dbch\af11\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af41\afs20 \ltrch\fcs0 \fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 EFFET JURIDIQUE.}{ +\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299\charrsid15014299 \hich\af41\dbch\af13\loch\f41 \hich\f41 Le pr\'e9\loch\f41 \hich\f41 sent contrat d\'e9\loch\f41 +crit certains droits juridiques. Vous pourriez avoir d\hich\f41 \rquote \loch\f41 \hich\f41 autres droits pr\'e9\loch\f41 \hich\f41 vus par les lois de votre pays. Le pr\'e9\loch\f41 sent contrat ne modif\hich\af41\dbch\af13\loch\f41 \hich\f41 +ie pas les droits que vous conf\'e8\loch\f41 rent les lois de votre pays si celles-ci ne le permettent pas}{\rtlch\fcs1 \ab0\af41\afs20 \ltrch\fcs0 \b0\fs20\lang1036\langfe1033\dbch\af13\langnp1036\insrsid15014299 .}{\rtlch\fcs1 \af41 \ltrch\fcs0 +\insrsid4000782 +\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a +9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad +5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 +b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 +0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 +a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f +c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 +0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 +a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 +6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b +4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b +4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210030dd4329a8060000a41b0000160000007468656d652f7468656d652f +7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87 +615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad +79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b +5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab +999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9 +699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586 +8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6 +0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f +9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be +15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979 +3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d +32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a +f074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86 +e877f0034e16bafb0e258ebb4faf06b769e888340b103d331115bebc4eb813bf83291b63624a0d1475a756c734f9bbc2cd28546ecbe1e20a3794ca175f3fae90 +fb6d2dd99bb07b55e5ccf68942bd0877b23c77b908e8db5f9db7f024d9239010f35bd4bbe2fcae387bfff9e2bc289f2fbe24cfaa301468dd8bd846dbb4ddf1c2 +ae7b4c191ba8292337a469bc25ec3d411f06f53a73e224c5292c8de0516732307070a1c0660d125c7d44553488700a4d7bddd3444299910e254ab984c3a219ae +a4adf1d0f82b7bd46cea4388ad1c12ab5d1ed8e1153d9c9f350a3246aad01c6873462b9ac05999ad5cc988826eafc3acae853a33b7ba11cd1445875ba1b236b1 +399483c90bd560b0b0263435085a21b0f22a9cf9356b38ec6046026d77eba3dc2dc60b17e92219e180643ed27acffba86e9c94c7ca9c225a0f1b0cfae0788ad5 +4adc5a9aec1b703b8b93caec1a0bd8e5de7b132fe5113cf312503b998e2c2927274bd051db6b35979b1ef271daf6c6704e86c73805af4bdd476216c26593af84 +0dfb5393d964f9cc9bad5c313709ea70f561ed3ea7b053075221d51696910d0d339585004b34272bff7213cc7a510a5454a3b349b1b206c1f0af490176745d4b +c663e2abb2b34b23da76f6352ba57ca2881844c1111ab189d8c7e07e1daaa04f40255c77988aa05fe06e4e5bdb4cb9c5394bbaf28d98c1d971ccd20867e556a7 +689ec9166e0a522183792b8907ba55ca6e943bbf2a26e52f48957218ffcf54d1fb09dc3eac04da033e5c0d0b8c74a6b43d2e54c4a10aa511f5fb021a07533b20 +5ae07e17a621a8e082dafc17e450ffb739676998b48643a4daa7211214f623150942f6a02c99e83b85583ddbbb2c4996113211551257a656ec1139246ca86be0 +aadedb3d1441a89b6a929501833b197fee7b9641a3503739e57c732a59b1f7da1cf8a73b1f9bcca0945b874d4393dbbf10b1680f66bbaa5d6f96e77b6f59113d +316bb31a795600b3d256d0cad2fe354538e7566b2bd69cc6cbcd5c38f0e2bcc63058344429dc2121fd07f63f2a7c66bf76e80d75c8f7a1b622f878a18941d840 +545fb28d07d205d20e8ea071b283369834296bdaac75d256cb37eb0bee740bbe278cad253b8bbfcf69eca23973d939b97891c6ce2cecd8da8e2d343578f6648a +c2d0383fc818c798cf64e52f597c740f1cbd05df0c264c49134cf09d4a60e8a107260f20f92d47b374e32f000000ffff0300504b030414000600080000002100 +0dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f7 +8277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89 +d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd500 +1996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0f +bfff0000001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6 +a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a +0000001c00000000000000000000000000190200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021 +0030dd4329a8060000a41b00001600000000000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d001400060008 +00000021000dd1909fb60000001b0100002700000000000000000000000000b20900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000ad0a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax371\lsdlockeddef0\lsdsemihiddendef0\lsdunhideuseddef0\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal;\lsdqformat1 \lsdlocked0 heading 1; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 2;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 3;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 4; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 5;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 6;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 7; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 8;\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdlocked0 heading 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 6; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 7;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 8;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index 9;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 1; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 2;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 3;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 4; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 5;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 6;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 7; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 8;\lsdsemihidden1 \lsdunhideused1 \lsdpriority39 \lsdlocked0 toc 9;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote text; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 header;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footer;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 index heading; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of figures;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope address; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 envelope return;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 footnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 line number; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 page number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote reference;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 endnote text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 table of authorities; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 macro;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 toa heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Bullet 5;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 4; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Number 5;\lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Closing;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Signature; +\lsdsemihidden1 \lsdunhideused1 \lsdpriority1 \lsdlocked0 Default Paragraph Font;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 4;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 List Continue 5; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Message Header;\lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Salutation;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Date; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text First Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Note Heading;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 2;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Body Text Indent 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Block Text; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Hyperlink;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 FollowedHyperlink;\lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Document Map;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Plain Text;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 E-mail Signature;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Top of Form; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Bottom of Form;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Normal (Web);\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Acronym;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Address; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Cite;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Code;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Definition;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Keyboard; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Preformatted;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Sample;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Typewriter;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 HTML Variable; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 annotation subject;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 No List;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 1;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 2; +\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Outline List 3;\lsdsemihidden1 \lsdunhideused1 \lsdlocked0 Balloon Text;\lsdpriority59 \lsdlocked0 Table Grid;\lsdsemihidden1 \lsdlocked0 Placeholder Text;\lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; +\lsdpriority60 \lsdlocked0 Light Shading;\lsdpriority61 \lsdlocked0 Light List;\lsdpriority62 \lsdlocked0 Light Grid;\lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdpriority65 \lsdlocked0 Medium List 1; +\lsdpriority66 \lsdlocked0 Medium List 2;\lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdpriority68 \lsdlocked0 Medium Grid 2;\lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdpriority70 \lsdlocked0 Dark List;\lsdpriority71 \lsdlocked0 Colorful Shading; +\lsdpriority72 \lsdlocked0 Colorful List;\lsdpriority73 \lsdlocked0 Colorful Grid;\lsdpriority60 \lsdlocked0 Light Shading Accent 1;\lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdpriority62 \lsdlocked0 Light Grid Accent 1; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdsemihidden1 \lsdlocked0 Revision;\lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph; +\lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; +\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 1;\lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 1; +\lsdpriority60 \lsdlocked0 Light Shading Accent 2;\lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2; +\lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 2;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; +\lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdpriority72 \lsdlocked0 Colorful List Accent 2;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdpriority60 \lsdlocked0 Light Shading Accent 3; +\lsdpriority61 \lsdlocked0 Light List Accent 3;\lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 3; +\lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdpriority70 \lsdlocked0 Dark List Accent 3; +\lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 3;\lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdpriority61 \lsdlocked0 Light List Accent 4; +\lsdpriority62 \lsdlocked0 Light Grid Accent 4;\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 4;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 4; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; +\lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdpriority60 \lsdlocked0 Light Shading Accent 5;\lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdpriority62 \lsdlocked0 Light Grid Accent 5; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5;\lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 5; +\lsdpriority72 \lsdlocked0 Colorful List Accent 5;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdpriority61 \lsdlocked0 Light List Accent 6;\lsdpriority62 \lsdlocked0 Light Grid Accent 6; +\lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6;\lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdpriority66 \lsdlocked0 Medium List 2 Accent 6; +\lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6;\lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdpriority70 \lsdlocked0 Dark List Accent 6;\lsdpriority71 \lsdlocked0 Colorful Shading Accent 6; +\lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdpriority73 \lsdlocked0 Colorful Grid Accent 6;\lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; +\lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference;\lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdsemihidden1 \lsdunhideused1 \lsdpriority37 \lsdlocked0 Bibliography; +\lsdsemihidden1 \lsdunhideused1 \lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;\lsdpriority41 \lsdlocked0 Plain Table 1;\lsdpriority42 \lsdlocked0 Plain Table 2;\lsdpriority43 \lsdlocked0 Plain Table 3;\lsdpriority44 \lsdlocked0 Plain Table 4; +\lsdpriority45 \lsdlocked0 Plain Table 5;\lsdpriority40 \lsdlocked0 Grid Table Light;\lsdpriority46 \lsdlocked0 Grid Table 1 Light;\lsdpriority47 \lsdlocked0 Grid Table 2;\lsdpriority48 \lsdlocked0 Grid Table 3;\lsdpriority49 \lsdlocked0 Grid Table 4; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 1; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 1;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 1;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 1; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 1;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 2;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 2; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 2;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 2; +\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 3;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 3;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 3;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 3; +\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 3;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 4; +\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 4;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 4;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 4;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 4; +\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 4;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 5; +\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 5;\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 5;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 5; +\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 5;\lsdpriority46 \lsdlocked0 Grid Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 Grid Table 2 Accent 6;\lsdpriority48 \lsdlocked0 Grid Table 3 Accent 6; +\lsdpriority49 \lsdlocked0 Grid Table 4 Accent 6;\lsdpriority50 \lsdlocked0 Grid Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 Grid Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 Grid Table 7 Colorful Accent 6; +\lsdpriority46 \lsdlocked0 List Table 1 Light;\lsdpriority47 \lsdlocked0 List Table 2;\lsdpriority48 \lsdlocked0 List Table 3;\lsdpriority49 \lsdlocked0 List Table 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful;\lsdpriority52 \lsdlocked0 List Table 7 Colorful;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 1;\lsdpriority47 \lsdlocked0 List Table 2 Accent 1;\lsdpriority48 \lsdlocked0 List Table 3 Accent 1; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 1;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 1;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 1;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 1; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 2;\lsdpriority47 \lsdlocked0 List Table 2 Accent 2;\lsdpriority48 \lsdlocked0 List Table 3 Accent 2;\lsdpriority49 \lsdlocked0 List Table 4 Accent 2; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 2;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 2;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 2;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 3; +\lsdpriority47 \lsdlocked0 List Table 2 Accent 3;\lsdpriority48 \lsdlocked0 List Table 3 Accent 3;\lsdpriority49 \lsdlocked0 List Table 4 Accent 3;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 3; +\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 3;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 3;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 4;\lsdpriority47 \lsdlocked0 List Table 2 Accent 4; +\lsdpriority48 \lsdlocked0 List Table 3 Accent 4;\lsdpriority49 \lsdlocked0 List Table 4 Accent 4;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 4;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 4; +\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 4;\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 5;\lsdpriority47 \lsdlocked0 List Table 2 Accent 5;\lsdpriority48 \lsdlocked0 List Table 3 Accent 5; +\lsdpriority49 \lsdlocked0 List Table 4 Accent 5;\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 5;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 5;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 5; +\lsdpriority46 \lsdlocked0 List Table 1 Light Accent 6;\lsdpriority47 \lsdlocked0 List Table 2 Accent 6;\lsdpriority48 \lsdlocked0 List Table 3 Accent 6;\lsdpriority49 \lsdlocked0 List Table 4 Accent 6; +\lsdpriority50 \lsdlocked0 List Table 5 Dark Accent 6;\lsdpriority51 \lsdlocked0 List Table 6 Colorful Accent 6;\lsdpriority52 \lsdlocked0 List Table 7 Colorful Accent 6;}}{\*\datastore 010500000200000018000000 +4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000409a +6c7cba25ce01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/Microsoft.Bcl.Build.1.0.4.nupkg b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/Microsoft.Bcl.Build.1.0.4.nupkg new file mode 100644 index 0000000..6c21484 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/Microsoft.Bcl.Build.1.0.4.nupkg differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/Microsoft.Bcl.Build.1.0.4.nuspec b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/Microsoft.Bcl.Build.1.0.4.nuspec new file mode 100644 index 0000000..96831f2 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/Microsoft.Bcl.Build.1.0.4.nuspec @@ -0,0 +1,19 @@ + + + + Microsoft.Bcl.Build + 1.0.4 + Microsoft BCL Build Components + Microsoft + Microsoft + http://go.microsoft.com/fwlink/?LinkID=296407 + http://go.microsoft.com/fwlink/?LinkID=296436 + http://go.microsoft.com/fwlink/?LinkID=288859 + true + This package provides build infrastructure components so that projects referencing specific Microsoft packages can successfully build. + Provides build infrastructure components for Microsoft packages. + Copyright © Microsoft Corporation + BCL Microsoft + + + \ No newline at end of file diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/net40/_._ b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/net40/_._ new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/netcore45/_._ b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/netcore45/_._ new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/portable-net40+win8+sl4+wp71/_._ b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/portable-net40+win8+sl4+wp71/_._ new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/sl4-windowsphone71/_._ b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/sl4-windowsphone71/_._ new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/sl4/_._ b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/content/sl4/_._ new file mode 100644 index 0000000..e69de29 diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Install.ps1 b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Install.ps1 new file mode 100644 index 0000000..66af151 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Install.ps1 @@ -0,0 +1,18 @@ +param($installPath, $toolsPath, $package, $project) + # This is the MSBuild targets file to add + $targetsFile = [System.IO.Path]::Combine($toolsPath, $package.Id + '.targets') + + # Need to load MSBuild assembly if it's not loaded yet. + Add-Type -AssemblyName 'Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' + + # Grab the loaded MSBuild project for the project + $msbuild = [Microsoft.Build.Evaluation.ProjectCollection]::GlobalProjectCollection.GetLoadedProjects($project.FullName) | Select-Object -First 1 + + # Make the path to the targets file relative. + $projectUri = new-object Uri('file://' + $project.FullName) + $targetUri = new-object Uri('file://' + $targetsFile) + $relativePath = $projectUri.MakeRelativeUri($targetUri).ToString().Replace([System.IO.Path]::AltDirectorySeparatorChar, [System.IO.Path]::DirectorySeparatorChar) + + # Add the import and save the project + $msbuild.Xml.AddImport($relativePath) | out-null + $project.Save() \ No newline at end of file diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Microsoft.Bcl.Build.Tasks.dll b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Microsoft.Bcl.Build.Tasks.dll new file mode 100644 index 0000000..2097a51 Binary files /dev/null and b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Microsoft.Bcl.Build.Tasks.dll differ diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Microsoft.Bcl.Build.targets b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Microsoft.Bcl.Build.targets new file mode 100644 index 0000000..7af7a89 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Microsoft.Bcl.Build.targets @@ -0,0 +1,227 @@ + + + + + + false + + + $(ProjectConfigFileName) + + + + + + <_FullFrameworkReferenceAssemblyPaths>$(TargetFrameworkDirectory) + + + + + + <__IntermediateAppConfig>$(IntermediateOutputPath)$(MSBuildProjectFile).App.config + + + + + + + + + <_EnsureBindingRedirectReference Include="@(Reference)" + Condition="'%(Reference.HintPath)' != '' and Exists('$([System.IO.Path]::GetDirectoryName("%(Reference.HintPath)"))\\ensureRedirect.xml')" /> + + + + + + + + + + + + + + + $(__IntermediateAppConfig) + + + + + $(TargetFileName).config + + + + + + + + + + + <_BclBuildProjectReferenceProperties>BclBuildReferencingProject=$(MSBuildProjectFullPath);BclBuildReferencingProjectConfig=$(MSBuildProjectDirectory)\packages.config + <_BclBuildProjectReferenceProperties Condition="'$(SkipValidatePackageReferences)' != ''">$(_BclBuildProjectReferenceProperties);SkipValidatePackageReferences=$(SkipValidatePackageReferences) + + + + + %(ProjectReference.Properties);$(_BclBuildProjectReferenceProperties) + + + + + + + + true + + + + + + + + + + false + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Uninstall.ps1 b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Uninstall.ps1 new file mode 100644 index 0000000..e43af29 --- /dev/null +++ b/Rx/NET/Source/packages/Microsoft.Bcl.Build.1.0.4/tools/Uninstall.ps1 @@ -0,0 +1,13 @@ +param($installPath, $toolsPath, $package, $project) + + # Need to load MSBuild assembly if it's not loaded yet. + Add-Type -AssemblyName 'Microsoft.Build, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' + + # Grab the loaded MSBuild project for the project + $msbuild = [Microsoft.Build.Evaluation.ProjectCollection]::GlobalProjectCollection.GetLoadedProjects($project.FullName) | Select-Object -First 1 + $importToRemove = $msbuild.Xml.Imports | Where-Object { $_.Project.Endswith($package.Id + '.targets') } + + # Add the import and save the project + $msbuild.Xml.RemoveChild($importToRemove) | out-null + $project.Save() + \ No newline at end of file diff --git a/Rx/NET/Source/packages/repositories.config b/Rx/NET/Source/packages/repositories.config new file mode 100644 index 0000000..ed831ea --- /dev/null +++ b/Rx/NET/Source/packages/repositories.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Rx/NET/Test/Rx/ConsoleApp45_NoPlatformServices/ConsoleApp45_NoPlatformServices.csproj b/Rx/NET/Test/Rx/ConsoleApp45_NoPlatformServices/ConsoleApp45_NoPlatformServices.csproj index 7c54b05..bfcd05a 100644 --- a/Rx/NET/Test/Rx/ConsoleApp45_NoPlatformServices/ConsoleApp45_NoPlatformServices.csproj +++ b/Rx/NET/Test/Rx/ConsoleApp45_NoPlatformServices/ConsoleApp45_NoPlatformServices.csproj @@ -38,25 +38,29 @@ - + False - ..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SDKs\Reactive Extensions\v2.0\Binaries\.NETFramework\v4.5\System.Reactive.Core.dll + ..\..\..\Source\bin\Release45\System.Reactive.Core.dll - + False - ..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SDKs\Reactive Extensions\v2.0\Binaries\.NETFramework\v4.5\System.Reactive.Interfaces.dll + ..\..\..\Source\bin\Release45\System.Reactive.Interfaces.dll - + False - ..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SDKs\Reactive Extensions\v2.0\Binaries\.NETFramework\v4.5\System.Reactive.Linq.dll + ..\..\..\Source\bin\Release45\System.Reactive.Linq.dll - + False - ..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SDKs\Reactive Extensions\v2.0\Binaries\.NETFramework\v4.5\System.Reactive.Providers.dll + ..\..\..\Source\bin\Release45\System.Reactive.PlatformServices.dll - + False - ..\..\..\..\..\..\..\..\Program Files (x86)\Microsoft SDKs\Reactive Extensions\v2.0\Binaries\.NETFramework\v4.5\System.Reactive.Runtime.Remoting.dll + ..\..\..\Source\bin\Release45\System.Reactive.Providers.dll + + + False + ..\..\..\Source\bin\Release45\System.Reactive.Runtime.Remoting.dll @@ -72,9 +76,9 @@ - - {d1a0ccfc-74ab-411c-b031-8cae34d128ae} - PortableLibraryProfile78 + + {a8eff824-9d19-4a20-a59c-64846b9b9346} + PortableLibraryProfile78_NuGet diff --git a/Rx/NET/Test/Rx/ConsoleApp45_NoPlatformServices/Program.cs b/Rx/NET/Test/Rx/ConsoleApp45_NoPlatformServices/Program.cs index 963f77c..96c23e5 100644 --- a/Rx/NET/Test/Rx/ConsoleApp45_NoPlatformServices/Program.cs +++ b/Rx/NET/Test/Rx/ConsoleApp45_NoPlatformServices/Program.cs @@ -7,7 +7,7 @@ using System.Reflection; using System.Text; using System.Threading; using System.Threading.Tasks; -using PortableLibraryProfile7; +using PortableLibraryProfile78_NuGet; namespace ConsoleApp45_NoPlatformServices { diff --git a/Rx/NET/Test/Rx/ConsoleApp45_NuGet/App.config b/Rx/NET/Test/Rx/ConsoleApp45_NuGet/App.config index be63a25..434e45f 100644 --- a/Rx/NET/Test/Rx/ConsoleApp45_NuGet/App.config +++ b/Rx/NET/Test/Rx/ConsoleApp45_NuGet/App.config @@ -3,20 +3,4 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Rx/NET/Test/Rx/ConsoleApp45_NuGet/ConsoleApp45_NuGet.csproj b/Rx/NET/Test/Rx/ConsoleApp45_NuGet/ConsoleApp45_NuGet.csproj index 7e7daf9..cfa1da0 100644 --- a/Rx/NET/Test/Rx/ConsoleApp45_NuGet/ConsoleApp45_NuGet.csproj +++ b/Rx/NET/Test/Rx/ConsoleApp45_NuGet/ConsoleApp45_NuGet.csproj @@ -38,23 +38,29 @@ - - ..\packages\Rx-Core.2.0.21030\lib\Net45\System.Reactive.Core.dll + + False + ..\packages\Rx-Core.2.1.30214.0\lib\Net45\System.Reactive.Core.dll - - ..\packages\Rx-Interfaces.2.0.21030\lib\Net45\System.Reactive.Interfaces.dll + + False + ..\packages\Rx-Interfaces.2.1.30214.0\lib\Net45\System.Reactive.Interfaces.dll - - ..\packages\Rx-Linq.2.0.21030\lib\Net45\System.Reactive.Linq.dll + + False + ..\packages\Rx-Linq.2.1.30214.0\lib\Net45\System.Reactive.Linq.dll - - ..\packages\Rx-PlatformServices.2.0.21030\lib\Net45\System.Reactive.PlatformServices.dll + + False + ..\packages\Rx-PlatformServices.2.1.30214.0\lib\Net45\System.Reactive.PlatformServices.dll - - ..\packages\Rx-Providers.2.0.21030\lib\Net45\System.Reactive.Providers.dll + + False + ..\packages\Rx-Providers.2.1.30214.0\lib\Net45\System.Reactive.Providers.dll - - ..\packages\Rx-Remoting.2.0.21030\lib\Net45\System.Reactive.Runtime.Remoting.dll + + False + ..\packages\Rx-Remoting.2.1.30214.0\lib\Net45\System.Reactive.Runtime.Remoting.dll @@ -71,9 +77,9 @@ - - {d1a0ccfc-74ab-411c-b031-8cae34d128ae} - PortableLibraryProfile78 + + {a8eff824-9d19-4a20-a59c-64846b9b9346} + PortableLibraryProfile78_NuGet diff --git a/Rx/NET/Test/Rx/ConsoleApp45_NuGet/Program.cs b/Rx/NET/Test/Rx/ConsoleApp45_NuGet/Program.cs index a74e791..62dd784 100644 --- a/Rx/NET/Test/Rx/ConsoleApp45_NuGet/Program.cs +++ b/Rx/NET/Test/Rx/ConsoleApp45_NuGet/Program.cs @@ -7,7 +7,7 @@ using System.Reflection; using System.Text; using System.Threading; using System.Threading.Tasks; -using PortableLibraryProfile7; +using PortableLibraryProfile78_NuGet; namespace ConsoleApp45_NuGet { diff --git a/Rx/NET/Test/Rx/ConsoleApp45_NuGet/packages.config b/Rx/NET/Test/Rx/ConsoleApp45_NuGet/packages.config index dab79f0..e7f5bcd 100644 --- a/Rx/NET/Test/Rx/ConsoleApp45_NuGet/packages.config +++ b/Rx/NET/Test/Rx/ConsoleApp45_NuGet/packages.config @@ -1,10 +1,10 @@  - - - - - - - + + + + + + + \ No newline at end of file diff --git a/Rx/NET/Test/Rx/PortableLibraryProfile78_NuGet/PortableLibraryProfile78_NuGet.csproj b/Rx/NET/Test/Rx/PortableLibraryProfile78_NuGet/PortableLibraryProfile78_NuGet.csproj index d31596b..d7ed409 100644 --- a/Rx/NET/Test/Rx/PortableLibraryProfile78_NuGet/PortableLibraryProfile78_NuGet.csproj +++ b/Rx/NET/Test/Rx/PortableLibraryProfile78_NuGet/PortableLibraryProfile78_NuGet.csproj @@ -40,23 +40,23 @@ + + + + + + - ..\packages\Rx-Core.2.0.21030\lib\Portable-Net45+WinRT45+WP8\System.Reactive.Core.dll + ..\packages\Rx-Core.2.1.30214.0\lib\Portable-Net45+WinRT45+WP8\System.Reactive.Core.dll - ..\packages\Rx-Interfaces.2.0.21030\lib\Portable-Net45+WinRT45+WP8\System.Reactive.Interfaces.dll + ..\packages\Rx-Interfaces.2.1.30214.0\lib\Portable-Net45+WinRT45+WP8\System.Reactive.Interfaces.dll - ..\packages\Rx-Linq.2.0.21030\lib\Portable-Net45+WinRT45+WP8\System.Reactive.Linq.dll + ..\packages\Rx-Linq.2.1.30214.0\lib\Portable-Net45+WinRT45+WP8\System.Reactive.Linq.dll - - - - - - - - v3.5 - - - true - full - false - Bin\Debug - DEBUG;TRACE;SILVERLIGHT - true - true - prompt - 4 - - - pdbonly - true - Bin\Release - TRACE;SILVERLIGHT - true - true - prompt - 4 - - - - - - - - - - - - - $(TargetFrameworkDirectory)System.Core.dll - - - - - - - - App.xaml - - - MainPage.xaml - - - - - - Designer - MSBuild:Compile - - - Designer - MSBuild:Compile - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/App.xaml b/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/App.xaml deleted file mode 100644 index 059154c..0000000 --- a/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/App.xaml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - diff --git a/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/App.xaml.cs b/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/App.xaml.cs deleted file mode 100644 index adad831..0000000 --- a/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/App.xaml.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Windows; -using System.Windows.Controls; -using System.Windows.Documents; -using System.Windows.Input; -using System.Windows.Media; -using System.Windows.Media.Animation; -using System.Windows.Shapes; - -namespace SilverlightApp5_NoPlatformServices -{ - public partial class App : Application - { - - public App() - { - this.Startup += this.Application_Startup; - this.Exit += this.Application_Exit; - this.UnhandledException += this.Application_UnhandledException; - - InitializeComponent(); - } - - private void Application_Startup(object sender, StartupEventArgs e) - { - this.RootVisual = new MainPage(); - } - - private void Application_Exit(object sender, EventArgs e) - { - - } - - private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) - { - // If the app is running outside of the debugger then report the exception using - // the browser's exception mechanism. On IE this will display it a yellow alert - // icon in the status bar and Firefox will display a script error. - if (!System.Diagnostics.Debugger.IsAttached) - { - - // NOTE: This will allow the application to continue running after an exception has been thrown - // but not handled. - // For production applications this error handling should be replaced with something that will - // report the error to the website and stop the application. - e.Handled = true; - Deployment.Current.Dispatcher.BeginInvoke(delegate { ReportErrorToDOM(e); }); - } - } - - private void ReportErrorToDOM(ApplicationUnhandledExceptionEventArgs e) - { - try - { - string errorMsg = e.ExceptionObject.Message + e.ExceptionObject.StackTrace; - errorMsg = errorMsg.Replace('"', '\'').Replace("\r\n", @"\n"); - - System.Windows.Browser.HtmlPage.Window.Eval("throw new Error(\"Unhandled Error in Silverlight Application " + errorMsg + "\");"); - } - catch (Exception) - { - } - } - } -} diff --git a/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/MainPage.xaml b/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/MainPage.xaml deleted file mode 100644 index 8605c6a..0000000 --- a/Rx/NET/Test/Rx/SilverlightApp5_NoPlatformServices/MainPage.xaml +++ /dev/null @@ -1,14 +0,0 @@ - - - -