Skip to content

Commit 1a1689d

Browse files
committed
ExeptionDispatchInfo #6
1 parent 51595cd commit 1a1689d

3 files changed

Lines changed: 13 additions & 12 deletions

File tree

src/FSharp.Control.AsyncSeq/AsyncSeq.fs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ open System
88
open System.IO
99
open System.Threading
1010
open System.Threading.Tasks
11+
open System.Runtime.ExceptionServices
1112

1213
#nowarn "40"
1314

@@ -41,7 +42,7 @@ module internal Utils =
4142
/// just OnNext method that gets 'ObservableUpdate' as an argument.
4243
type internal ObservableUpdate<'T> =
4344
| Next of 'T
44-
| Error of exn
45+
| Error of ExceptionDispatchInfo
4546
| Completed
4647

4748

@@ -55,7 +56,7 @@ module internal Utils =
5556
({ new IObserver<_> with
5657
member x.OnNext(v) = observer.OnNext(Next v)
5758
member x.OnCompleted() = observer.OnNext(Completed)
58-
member x.OnError(e) = observer.OnNext(Error e) }) }
59+
member x.OnError(e) = observer.OnNext(Error (ExceptionDispatchInfo.Capture e)) }) }
5960

6061
type Microsoft.FSharp.Control.Async with
6162
/// Starts the specified operation using a new CancellationToken and returns
@@ -258,7 +259,7 @@ module AsyncSeq =
258259
let res = ref Unchecked.defaultof<_>
259260
try
260261
res := Choice1Of2 (inp.GetEnumerator())
261-
with exn ->
262+
with exn ->
262263
res := Choice2Of2 exn
263264
match res.Value with
264265
| Choice1Of2 r ->
@@ -700,7 +701,7 @@ module AsyncSeq =
700701
while not fin.Value do
701702
let! msg = agent.Receive()
702703
match msg with
703-
| Observable.ObservableUpdate.Error e -> raise e
704+
| Observable.ObservableUpdate.Error e -> e.Throw()
704705
| Observable.Completed -> fin := true
705706
| Observable.Next v -> yield v
706707
finally
@@ -735,7 +736,7 @@ module AsyncSeq =
735736
do! iter (Observable.Next >> buf.Add) source
736737
buf.CompleteAdding()
737738
with err ->
738-
buf.Add(Observable.Error err)
739+
buf.Add(Observable.Error (ExceptionDispatchInfo.Capture err))
739740
buf.CompleteAdding()
740741
}
741742
|> fun p -> Async.StartAsTask(p, cancellationToken = cts.Token)
@@ -744,7 +745,7 @@ module AsyncSeq =
744745
for x in buf.GetConsumingEnumerable() do
745746
match x with
746747
| Observable.Next v -> yield v
747-
| Observable.Error err -> raise err
748+
| Observable.Error err -> err.Throw()
748749
| Observable.Completed -> failwith "unexpected"
749750
}
750751

@@ -1072,9 +1073,9 @@ module AsyncSeq =
10721073
member x.Dispose() =
10731074
let err = ref None
10741075
for i in ss.Length - 1 .. -1 .. 0 do
1075-
try dispose ss.[i] with e -> err := Some e
1076+
try dispose ss.[i] with e -> err := Some (ExceptionDispatchInfo.Capture e)
10761077
match !err with
1077-
| Some e -> raise e
1078+
| Some e -> e.Throw()
10781079
| None -> ()
10791080

10801081
let mergeAll (ss:AsyncSeq<'T> list) : AsyncSeq<'T> =

src/FSharp.Control.AsyncSeq/FSharp.Control.AsyncSeq.fsproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
<OutputType>Library</OutputType>
1010
<RootNamespace>FSharp.Control.AsyncSeq</RootNamespace>
1111
<AssemblyName>FSharp.Control.AsyncSeq</AssemblyName>
12-
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
13-
<TargetFSharpCoreVersion>4.3.0.0</TargetFSharpCoreVersion>
12+
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
13+
<TargetFSharpCoreVersion>4.4.0.0</TargetFSharpCoreVersion>
1414
<Name>FSharp.Control.AsyncSeq</Name>
1515
<TargetFrameworkProfile />
1616
</PropertyGroup>

tests/FSharp.Control.AsyncSeq.Tests/FSharp.Control.AsyncSeq.Tests.fsproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
<OutputType>Library</OutputType>
1010
<RootNamespace>FSharp.Control.AsyncSeq.Tests</RootNamespace>
1111
<AssemblyName>FSharp.Control.AsyncSeq.Tests</AssemblyName>
12-
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
13-
<TargetFSharpCoreVersion>4.3.0.0</TargetFSharpCoreVersion>
12+
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
13+
<TargetFSharpCoreVersion>4.4.0.0</TargetFSharpCoreVersion>
1414
<Name>FSharp.Control.AsyncSeq.Tests</Name>
1515
<TargetFrameworkProfile />
1616
<SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\..\</SolutionDir>

0 commit comments

Comments
 (0)