Map map = new Map() { Extent = new Envelope() { SpatialReference = new SpatialReference(3857) } };
I found a workaround: you have to add the FeatureLayer to a dummy Map...
I know this is quite strange and I really don't like it, but it works.
Create a dummy Map:Map map = new Map() { Extent = new Envelope() { SpatialReference = new SpatialReference(3857) } };
Add the FeatureLayer to the Layers collection, then initialize the FeatureLayer and in the Initialized event call the Update method to load the data (to fill the Graphics collection).
At this point you have to work with the Graphics: adding, updating, deleting graphics is all you have to do. Then call the SaveEdits method that in turn calls the ApplyEdits method of the internal EditTask (yes, the FeatureLayer has internally an EditTask).
Hint: if you have to work only with a subset of features set the Where property of the FeatureLayer before calling Initialize and Update methods.
it works, but I don't like this way at all: we are forced to load the FeatureLayer graphics (or a subset of them), working on them, before applying edits, with EditTask this is not necessary avoiding a roundtrip to the REST service (you have only to specify adds, deletes and updates graphics collection to send to the server).