I agree, bad idea.
Add an Initialize method.
You can also add a static method that returns the new object and executes the Initialize method.
In this way you can also keep the constructor as private.
public class XXX
{
private XXX()
{
}
private void DoMyWeirdThingsAsynchronously()
{
....
}
public static XXX PerformSomethingStrange()
{
XXX result = new XXX();
result.DoMyWeirdThingsAsynchronously();
return result;
}
}