ใครสามารถช่วยฉันวิธีการเรียกเมธอด SendSms (textMessageItems) แบบอะซิงโครนัสได้บ้าง วิธีการ/แนวทางปฏิบัติที่ดีที่สุดคืออะไร? ฉันคิดว่า Task.Run Async-Await สามารถใช้ได้ที่นี่เนื่องจากฉันใช้ .Net4.5 โดยใช้ MVC4 WebApi แต่ฉันอยากได้ยินจากผู้เชี่ยวชาญเพราะฉันยังใหม่กับเรื่องนี้ ฉันใช้รหัสนี้บนเว็บเซิร์ฟเวอร์ของฉันซึ่งอยู่ใน IIS7 และวิธีการนี้อาจใช้เวลาในการประมวลผลและต้องการประมวลผลแบบอะซิงโครนัสเพื่อให้การตอบกลับสามารถส่งคืนไปยังผู้โทรได้ทันที นอกจากนี้เนื่องจากฉันกำลังเรียก SendSms ภายใน for loop มันจะทำให้เกิดปัญหาหรือไม่ คุณคิดว่าฉันควรส่งต่อเป็นรายการคอลเลกชันแล้วดำเนินการหรือไม่? กรุณาแนะนำ.
using Twilio.Mvc;
using Twilio.TwiML.Mvc;
using Twilio.TwiML;
public class SmsController : ApiController
{
[HttpPost]
public HttpResponseMessage Post([FromBody]SmsRequest smsReq)
{
var response = new Twilio.TwiML.TwilioResponse();
//validation checks..
try
{
if ((txtMessageResponse != null) && (txtMessageResponse.SmsMessageInfo.Count > 0))
{
_smsStagingList = txtMessageResponse.SmsMessageInfo;
foreach (TextMessageStaging prepareTextMessageResponse in _smsStagingList)
{
smsDTO textMessageItems = new smsDTO();
textMessageItems.PhoneNumber = prepareTextMessageResponse.PhoneNumber;
textMessageItems.SmsMessage = prepareTextMessageResponse.SmsMessageBody;
isTxtMessageSent = SendSms(textMessageItems);
//If the messages were sent then no need to set the flag to be updated
if (isTxtMessageSent)
{
txtMessageStatusToBeUpdated = false;
}
}
return Request.CreateResponse(HttpStatusCode.OK, twilioResponse.Element);
}
else
{
//send error response
}
catch (Exception msgProcessingError)
{
//send error response again as processing error
}
finally
{
//set the outbound flag in the table
}
}
private bool SendSms(smsDTO textMessageItems)
{
bool isTxtMessageSent = false;
PushMessageRequest txtMessageRequest = new PushMessageRequest();
PushMessageResponse txtMessageResponse = null;
txtMessageRequest.SmsMessageInfo = new SendTextMessage(); //instantiate the dto
txtMessageRequest.SmsMessageInfo.ToPhone = textMessageItems.PhoneNumber;
txtMessageRequest.SmsMessageInfo.TextMessage = textMessageItems.SmsMessage;
try
{
using (ITextService textService = ObjectFactory.SendSmsMessage())
{
txtMessageResponse = textService.SendSmsMessage(txtMessageRequest);
}
isTxtMessageSent = txtMessageResponse.IsSuccessful;
}
catch (Exception ex)
{
isTxtMessageSent = false;
}
return isTxtMessageSent;
}