Skip to content

Commit bfb0532

Browse files
committed
add part 4
1 parent 6741f5b commit bfb0532

File tree

5 files changed

+144
-0
lines changed

5 files changed

+144
-0
lines changed
62.8 KB
Binary file not shown.
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3+
4+
<PropertyGroup>
5+
<!-- Enable the restore command to run before builds -->
6+
<RestorePackages Condition=" '$(RestorePackages)' == '' ">true</RestorePackages>
7+
<PaketToolsPath>$(MSBuildThisFileDirectory)</PaketToolsPath>
8+
<PaketRootPath>$(MSBuildThisFileDirectory)..\</PaketRootPath>
9+
<PaketLockFilePath>$(PaketRootPath)paket.lock</PaketLockFilePath>
10+
<PaketRestoreCacheFile>$(PaketRootPath)paket-files\paket.restore.cached</PaketRestoreCacheFile>
11+
<MonoPath Condition="'$(MonoPath)' == '' And Exists('/Library/Frameworks/Mono.framework/Commands/mono')">/Library/Frameworks/Mono.framework/Commands/mono</MonoPath>
12+
<MonoPath Condition="'$(MonoPath)' == ''">mono</MonoPath>
13+
</PropertyGroup>
14+
15+
<PropertyGroup>
16+
<!-- Paket command -->
17+
<PaketExePath Condition=" '$(PaketExePath)' == '' AND Exists('$(PaketRootPath)paket.exe')">$(PaketRootPath)paket.exe</PaketExePath>
18+
<PaketExePath Condition=" '$(PaketExePath)' == '' ">$(PaketToolsPath)paket.exe</PaketExePath>
19+
<PaketCommand Condition=" '$(OS)' == 'Windows_NT'">"$(PaketExePath)"</PaketCommand>
20+
<PaketCommand Condition=" '$(OS)' != 'Windows_NT' ">$(MonoPath) --runtime=v4.0.30319 "$(PaketExePath)"</PaketCommand>
21+
</PropertyGroup>
22+
23+
<Choose> <!-- MyProject.fsproj.paket.references has the highest precedence -->
24+
<When Condition="Exists('$(MSBuildProjectFullPath).paket.references')">
25+
<PropertyGroup>
26+
<PaketReferences>$(MSBuildProjectFullPath).paket.references</PaketReferences>
27+
</PropertyGroup>
28+
</When> <!-- MyProject.paket.references -->
29+
<When Condition="Exists('$(MSBuildProjectDirectory)\$(MSBuildProjectName).paket.references')">
30+
<PropertyGroup>
31+
<PaketReferences>$(MSBuildProjectDirectory)\$(MSBuildProjectName).paket.references</PaketReferences>
32+
</PropertyGroup>
33+
</When> <!-- paket.references -->
34+
<When Condition="Exists('$(MSBuildProjectDirectory)\paket.references')">
35+
<PropertyGroup>
36+
<PaketReferences>$(MSBuildProjectDirectory)\paket.references</PaketReferences>
37+
</PropertyGroup>
38+
</When> <!-- Set to empty if a reference file isn't found matching one of the 3 format options -->
39+
<Otherwise>
40+
<PropertyGroup>
41+
<PaketReferences></PaketReferences>
42+
</PropertyGroup>
43+
</Otherwise>
44+
</Choose>
45+
46+
<PropertyGroup>
47+
<!-- Commands -->
48+
<RestoreCommand>$(PaketCommand) restore --references-file "$(PaketReferences)"</RestoreCommand>
49+
<!-- We need to ensure packages are restored prior to assembly resolve -->
50+
<BuildDependsOn Condition="$(RestorePackages) == 'true'">RestorePackages; $(BuildDependsOn);</BuildDependsOn>
51+
</PropertyGroup>
52+
<Target Name="RestorePackages">
53+
<PropertyGroup>
54+
<PaketRestoreRequired>true</PaketRestoreRequired>
55+
</PropertyGroup>
56+
57+
<PropertyGroup Condition="Exists('$(PaketRestoreCacheFile)') ">
58+
<PaketRestoreCachedHash>$([System.IO.File]::ReadAllText('$(PaketRestoreCacheFile)'))</PaketRestoreCachedHash>
59+
<PaketRestoreLockFileHash>$([System.IO.File]::ReadAllText('$(PaketLockFilePath)'))</PaketRestoreLockFileHash>
60+
<PaketRestoreRequired>true</PaketRestoreRequired>
61+
<PaketRestoreRequired Condition=" '$(PaketRestoreLockFileHash)' == '$(PaketRestoreCachedHash)' ">false</PaketRestoreRequired>
62+
<PaketRestoreRequired Condition=" '$(PaketRestoreLockFileHash)' == '' ">true</PaketRestoreRequired>
63+
</PropertyGroup>
64+
65+
<Exec Command="$(RestoreCommand)"
66+
IgnoreStandardErrorWarningFormat="true"
67+
WorkingDirectory="$(PaketRootPath)"
68+
ContinueOnError="false"
69+
Condition=" '$(PaketRestoreRequired)' == 'true' AND Exists('$(PaketReferences)') AND '$(PaketReferences)' != '' "
70+
/>
71+
</Target>
72+
</Project>
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
source https://www.nuget.org/api/v2
2+
framework: net461
3+
nuget Hopac
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
RESTRICTION: == net461
2+
NUGET
3+
remote: https://www.nuget.org/api/v2
4+
FSharp.Core (4.3.4)
5+
Hopac (0.3.23)
6+
FSharp.Core (>= 3.1.2.5)
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#r "packages/Hopac/lib/net45/Hopac.Core.dll"
2+
#r "packages/Hopac/lib/net45/Hopac.Platform.dll"
3+
#r "packages/Hopac/lib/net45/Hopac.dll"
4+
5+
open Hopac
6+
open Hopac.Infixes
7+
8+
// let delayedPrintn msg delayInMillis =
9+
// timeOutMillis delayInMillis
10+
// |> Job.map (fun _ -> printfn "%s" msg)
11+
12+
// let delayedPrintn msg delayInMillis =
13+
// timeOutMillis delayInMillis
14+
// |> Alt.afterFun (fun _ -> printfn "%s" msg)
15+
16+
let delayedPrintn msg delayInMillis =
17+
Alt.prepareFun <| fun _ ->
18+
printfn "starting [%s]" msg
19+
timeOutMillis delayInMillis
20+
|> Alt.afterFun (fun _ -> printfn "%s" msg)
21+
22+
#time "on"
23+
delayedPrintn "Hi" 3000 |> run
24+
#time "off"
25+
26+
let delayedHiPrinter = delayedPrintn "Hi" 2000
27+
let delayedHelloPrinter = delayedPrintn "Hello" 1000
28+
29+
let runThemParallel () =
30+
delayedHiPrinter <*> delayedHelloPrinter
31+
|> run |> ignore
32+
33+
#time "on"
34+
runThemParallel ()
35+
#time "off"
36+
let chooseBetweenThem () =
37+
delayedHiPrinter <|> delayedHelloPrinter
38+
|> run
39+
40+
#time "on"
41+
chooseBetweenThem ()
42+
#time "off"
43+
44+
let delayedPrintnWithNack msg delayInMillis =
45+
let onNack nack =
46+
nack
47+
|> Alt.afterFun (fun _ -> printfn "aborting [%s]" msg)
48+
Alt.withNackJob <| fun nack ->
49+
Job.start (onNack nack)
50+
|> Job.map (fun _ -> delayedPrintn msg delayInMillis)
51+
52+
let delayedHiPrinterWithNack =
53+
delayedPrintnWithNack "Hi" 2000
54+
let delayedHelloPrinterWithNack =
55+
delayedPrintnWithNack "Hello" 1000
56+
57+
let chooseBetweenThemWithNack () =
58+
delayedHiPrinterWithNack <|> delayedHelloPrinterWithNack
59+
|> run
60+
61+
#time "on"
62+
chooseBetweenThemWithNack ()
63+
#time "off"

0 commit comments

Comments
 (0)