C#  -   Perguntas e Respostas  -  Resposta 7


 Resposta da Pergunta 7
Pergunta 7 Resposta:
Qual será o resultado obtido pela execução do seguinte código:
using System;
using System.Threading.Tasks;
public class Program
    {
        private static string resultado;
        public static void Main()
        {
            FazAlgumaCoisa();
            Console.WriteLine(resultado);
            Console.ReadLine();
        }
        static async Task<string> FazAlgumaCoisa()
        {
            await Task.Delay(5);
            resultado = "Macoratti .net!";
            return "FazAlgumaCoisa";
        }
    }

A resposta correta é a opção   D- ) Uma linha em branco

Justificativa:

Será exibida uma linha em branco porque a variável resultado não será inicializada quando a linha Console.WriteLine(resultado);  for executada.

Isso ocorre porque a chamada ao método FazAlgumaCoisa() foi feita de forma síncrona, sem usar a o operador await/wait , e a execução do método Main() continua sua execução.

Quando o método assíncrono FazAlgumaCoisa() for invocado, a função chamada por await , que é Task.Delay(5), será executada de forma assíncrona, e a linha depois da instrução await, não será executada até que Task.Delay termine (isso demora 5 segundos), e, neste tempo, o controle já retornou para o método Main() que chamou o método FazAlgumaCoisa(), que executa o código Console.WriteLine exibindo uma string que não foi inicializada.

 

 

Veja o resultado da compilação neste link : Compilação C#

Acertou a resposta ?

Então responda rápido:

Como contornar o problema e exibir o valor da variável resultado definida no método FazAlgumaCoisa() ?


A-)  Remover o operador await da instrução Task.Delay(5)
B-)  Remover o operador async do método FazAlgumaCoisa(). Ex:  static Task<string> FazAlgumaCoisa()
C-)  Incluir o operador async no método Main(). Ex:  public async static void Main()
D-)  Remover os operadores async e await do método FazAlgumaCoisa()
E-)  Incluir o operador Wait na chamada do método FazAlgumaCoisa. Ex: FazAlgumaCoisa().Wait();
 

Veja a resposta neste link : Resposta C#

Se dissermos que temos comunhão com ele (Jesus), e andarmos em trevas, mentimos, e não praticamos a verdade.
Mas, se andarmos na luz, como ele na luz está, temos comunhão uns com os outros, e o sangue de Jesus Cristo, seu Filho, nos purifica de todo o pecado.

1 João 1:6,7

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

 

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

 

Referências:


José Carlos Macoratti