8
votes

De retour Void dans la méthode de l'API Async WEB Controller

J'ai cette méthode Async à l'intérieur du contrôleur API Web ASP.NET MVC 4 que j'ai reçu de ce blog: http://www.strathweb.com/2012/04/html5-drag-and-drop-aSynchronique-multi-file-upload-with-asp-net-webapi/

    public async void Post()
    {
        List<RecivedFile> result = new List<RecivedFile>();
        if (Request.Content.IsMimeMultipartContent())
        {
            try
            {
                MultipartFormDataStreamProvider stream = new MultipartFormDataStreamProvider(HostingEnvironment.MapPath("~/USER-UPLOADS"));

                IEnumerable<HttpContent> bodyparts = await Request.Content.ReadAsMultipartAsync(stream);
                IDictionary<string, string> bodyPartFiles = stream.BodyPartFileNames;
                IList<string> newFiles = new List<string>();

                foreach (var item in bodyPartFiles)
                {
                    var newName = string.Empty;
                    var file = new FileInfo(item.Value);

                    if (item.Key.Contains("\""))
                        newName = Path.Combine(file.Directory.ToString(), item.Key.Substring(1, item.Key.Length - 2));
                    else
                        newName = Path.Combine(file.Directory.ToString(), item.Key);

                    File.Move(file.FullName, newName);
                    newFiles.Add(newName);
                }

            }
            catch (Exception e)
            {
            }
        }

    }


0 commentaires

3 Réponses :


0
votes

Avec vide de type de retour que vous n'attendez pas un objet retour .. Vous attendez une opération à la fin. Vous attendez votre Tâche à la fin.


1 commentaires

Je ne sais pas que vous vous référez en disant «vous» («vous n'attendez pas»). Je ne veux pas attendre quoi que ce soit. Le point ici qu'il est utilisé dans l'API Web et je ne peux pas comprendre ce que voulez-vous exactement que j'attends?



7
votes

L'heure d'exécution ASP.NET attend. Vous pouvez trouver Cette vidéo utile.

La plupart des exemples de async supposent un contexte d'assurance-chômage. Asp.net fournit également un contexte , mais c'est un contexte "Demande" - un pour chaque demande HTTP. Mon async / attendre Post donne une vue d'ensemble de ce "contexte" et le async / attendre FAQ passe dans beaucoup plus de détails.


3 commentaires

La conclusion est donc de ne jamais renverser le vide dans les méthodes asynchrones lorsqu'il est utilisé dans ASP.NET


Il y a une poignée de situations dans ASP.NET 4.5 où vous pouvez utiliser une méthode async vide - le moteur d'exécution détectera et réagir de manière appropriée. Mais en règle générale, il est préférable d'utiliser async Tâche sauf si vous avez vraiment Vous à faire async vide .


car vide async est essentiellement « feu et oublier » il y a très rarement une raison de le faire. Un exemple est le page_load dans les nouveaux formulaires Web - protégé async void Page_Load (object sender, EventArgs e)



0
votes

Si vous revenez vide, vous retournerez 204 message de réponse « Pas de contenu » immédiatement quel que soit l'état d'avancement de votre opération asynchrone. Cela se fait à l'aide de VoidResultConverter .

Remarque: RC, vous verrez qu'il retourne réponse 200 « OK » mais avec la RTM, il retournera 204 réponse "Pas de contenu".


0 commentaires