public void GetResult_ThrowOnBackgroundThread() {
            var cts = new CancellationTokenSource();
            var awaitable = new MainThreadAwaitable(_mainThread, cts.Token);
            cts.Cancel();

            Action a = () => awaitable.GetAwaiter().GetResult();
            a.ShouldThrow<OperationCanceledException>();
        }
        public async Task Await_OnDispatcherThread() {
            var awaitable = new MainThreadAwaitable(_mainThread);

            await awaitable;

            Thread.CurrentThread.ManagedThreadId.Should().Be(_mainThread.ThreadId);
            Action a = () => awaitable.GetAwaiter().GetResult();
            a.ShouldNotThrow();
        }
        public void IsCompleleted_DispatcherThread() {
            var awaitable = new MainThreadAwaitable(_mainThread);

            Thread.CurrentThread.ManagedThreadId.Should().Be(_mainThread.ThreadId);
            awaitable.GetAwaiter().IsCompleted.Should().Be(true);
        }
        public void IsCompleleted_BackgroundThread() {
            var awaitable = new MainThreadAwaitable(_mainThread);

            Thread.CurrentThread.ManagedThreadId.Should().NotBe(_mainThread.ThreadId);
            awaitable.GetAwaiter().IsCompleted.Should().Be(false);
        }