Please consider the following code:
public async Task GetString()
{
//Some code here...
var data = await A();
//Some more code...
Every method is going to have a state machine, yes.
Keep in mind that the "overhead" of the state machine is primarily the allocation of one object (that and a few goto
s, which are going to be quite fast), so any type of "optimization" that you perform to remove it is the same as not creating an instance of a class once.
As to whether or not it's cost is greater or less than doing the work synchronously, that's something you're going to need to do performance benchmarks on given the specifics of your application and hardware to know for sure.