Non-nullable reference type default parameters in C# 8
My take on this is that the function signature should not lie.
So if it can handle a null passed in, as it can, it should use 

Bar? bar = null


Another approach could be to overload the function with another which only takes a single parameter. Something like ...

Task FooAsync(
   Bar bar,
   CancellationToken ct = default)
{
    ...
}

Task FooAsync(
   CancellationToken ct = default)
{
    return FooAsync(new Bar(), ct);
}