Question: I'm having permissions issues running `docker` on Ubuntu 18.04 LTS.
There are lots of posts describing a fix with `sudo usermod -a -G docker $USER`, however, this does not work for me.

Here is the error:

```
myuser@ubuntu:~$ docker container ls
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/json: dial unix /var/run/docker.sock: connect: permission denied

```

Run the usermod

```
myuser@ubuntu:~$ sudo usermod -a -G docker $USER

```

Confirm that my username is in the docker group:

```
myuser@ubuntu:~$ cat /etc/group | grep docker
docker:x:129:myuser

```

Also tried:

1. Close terminal window.
2. Log out of Ubuntu and back in.

And then:

```
myuser@ubuntu:~$ docker container ls
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/json: dial unix /var/run/docker.sock: connect: permission denied

```

... Same issue!

It works when I use `sudo`

```
myuser@ubuntu:~$ sudo !!
sudo docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
18b3719b66d2        postgres:10.3       "docker-entrypoint.s…"   27 minutes ago      Up 27 minutes       0.0.0.0:5432->5432/tcp   local-postgres10.3

```

Any ideas?

Answer: 
The interface `IAsyncResult` is a legacy from the very early days of async on .NET (remember `FileStream.BeginRead`/`FileStream.EndRead`), so it's used only when interop with legacy APIs.

The fact that `Async.AwaitIAsyncResult` returns `Async<bool>` does not mean that it handles exceptions in any way, in fact it does not.

So with `Async.AwaitIAsyncResult` out of the way, I'll say that your third example

```
async {
    do! myDbContext.SaveChangesAsync true
    |> Async.AwaitTask
    |> Async.Ignore
}

```

is the way to go, since the intent is explicit.
I can't see how your example would compile so I hope I'm not missing something here.

I think this is how I'd tackle it:

```ml
open FSharp.Control.Tasks.V2 // From nuget package Taskbuilder.fs

let someExampleAsync (thing: bool) : Threading.Tasks.Task<int> = 
    task {
        printfn "this got called"
        return 1
    }

let saveChanges() : Async<int> = someExampleAsync true |> Async.AwaitTask

// await once
saveChanges() |> Async.RunSynchronously |> ignore

// await a few times
let repeatIt = 
    async {
        let! awaitOnce = saveChanges()
        let! awaitAgain = saveChanges()
        let! awaitAndAgain = saveChanges()
        return "all done"
    }

repeatIt |> Async.RunSynchronously |> ignore

```

Disclaimer: I'm a beginner.