Usando async aguarda dentro del método void

Tengo método con firma que no puedo cambiar. Debería ser

protected override void OnInitialize() 

Utilizando Windows 8 Metro API, necesito verificar si el archivo existe y leerlo, dentro de este método NoSignatureChange. Usando PlainOldCSharp, escribiría algo como

 protected override void OnInitialize() { ... try { var file = folder.OpenFile(fileName); fileExists=true; } catch(FileNotFoundException) { fileExists=false } } 

Recuerde, en la API de Windows 8, la única forma de comprobar si el archivo existe es manejar la excepción FileNotFoundException. Además, en la API de Windows 8, todas las API de FileIO son asíncronas, por lo que solo tengo el método file.OpenFileAsync.

Entonces, la pregunta es: ¿Cómo debo escribir este código usando la carpeta? Método OpenFileAsync en la API de Windows 8 sin cambiar la firma del método que contiene

Aún puedes hacer un método voyn async:

 protected async void CannotChangeSignature() { ... } 

Los tipos de retorno válidos para un método asíncrono son:

  • void
  • Task
  • Task

Sin embargo, si quiere que se bloquee realmente , entonces básicamente está luchando contra la plataforma, el objective es evitar el locking.

Usted dice que no puede cambiar la firma, pero si está confiando en este locking, entonces tiene que cambiar la forma en que aborda la encoding.

Lo ideal es que cambies la firma a la Task :

 protected async Task CannotChangeSignature() { ... try { await ApplicationData.Current.LocalFolder.GetFileAsync(fileName); return true; } catch(FileNotFoundException) { return false; } } 

EDITAR: Si realmente necesita un locking, solo tendrá que llamar a AsTask().Wait() , capture la FileNotFoundException AggregateException y verifique si contiene una FileNotFoundException . Sin embargo, realmente es bastante horrible … ¿no puedes diseñar alrededor de esto para que no tenga que estar bloqueando? Por ejemplo, comience a buscar el archivo y muestre un error (o lo que sea) si y cuando lo encuentra, no existe.