0

我在单个 asp.net 应用程序中面临两个不同端点的问题。基本上,问题是其中一个端点不允许页面中的异步方法,而另一个端点允许。如果我运行应用程序,一个端点会要求我有一个异步 asp.net 页面,但另一个端点会崩溃,反之亦然。

public async Task<AirtableListRecordsResponse> RetrieveRecord()
    {
        string MyProductID = ProductID;
        string baseId = "00000000000xxxx";
        string appKey = "00000000000xxxx";
        var records = new List<AirtableRecord>();
        using (AirtableBase airtableBase = new AirtableBase(appKey, baseId))
        {
            Task<AirtableListRecordsResponse> task = airtableBase.ListRecords(tableName: "efls", filterByFormula: ProductID);


            AirtableListRecordsResponse response = await task;
            if (!response.Success)
            {
                string errorMessage = null;
                if (response.AirtableApiError is AirtableApiException)
                {
                    errorMessage = response.AirtableApiError.ErrorMessage;
                }
                else
                {
                    errorMessage = "Unknown error";
                }
                // Report errorMessage
            }
            else
            {

                records.AddRange(response.Records.ToList());
                var record = response.Records;
                //offset = response.Offset;

                //var record = response.Record;
                foreach (var item in record)
                {
                    foreach (var Fields in item.Fields)
                    {
                        if (Fields.Key == "pdfUrl")
                        {
                            string link = Fields.Value.ToString();
                            MyLink = Fields.Value.ToString();
                        }

                    }
                }
                // Do something with your retrieved record.
                // Such as getting the attachmentList of the record if you
                // know the Attachment field name
                //var attachmentList = response.Record.GetAttachmentField(YOUR_ATTACHMENT_FIELD_NAME);
            }
            return response;
        }
    }

这是请求异步页面的异步方法,另一个包含强大的结构,不能以任何理由更改。有什么办法可以让它们一起工作吗?

顺便说一句,我正在使用 airtable.com api。

提前致谢。

4

2 回答 2

0

我自己解决了,

我找到的解决方案如下:

当一个页面与两个不同的端点一起工作并且其中一个要求页面是异步的时,最好的解决方案是将过程分成两个不同的部分和/或页面,其中一个将调用异步方法并检索信息和其他工作没有异步。

如何在站点之间传递信息?

使用 session variables,有一些端点只需要显示简单的数据,如本例所示,因此 session 变量将在页面 #2 中调用,该页面是非异步页面。

这是一个简单但有效的解决方案。

非常感谢大家的回答。

于 2018-10-18T14:44:52.287 回答
-2

使用等待任务,您可以使用同步方法

Task<AirtableListRecordsResponse> task = Task.Run(() => airtableBase.ListRecords(tableName: "efls", filterByFormula: ProductID)); 
task.Wait();
AirtableListRecordsResponse response = task.Result;

仅当您无法使用异步方法时才使用它。

如 msdn 博客中所述,此方法完全无死锁 - https://blogs.msdn.microsoft.com/jpsanders/2017/08/28/asp-net-do-not-use-task-result-in-main-语境/

于 2018-10-16T20:18:00.870 回答